活跃农民
- 积分
- 980
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-12-3
- 最后登录
- 1970-1-1
|
自己写了一个Java解法,供大家参考。楼主有点东西的,这么难的题居然能搞定三道。
- class Solution {
- private static final Map<String, Integer> WORDS;
- static {
- WORDS = new HashMap<>() {{
- put("One", 1);
- put("Two", 2);
- put("Three", 3);
- put("Four", 4);
- put("Five", 5);
- put("Six", 6);
- put("Seven", 7);
- put("Eight", 8);
- put("Nine", 9);
- put("Ten", 10);
- put("Eleven", 11);
- put("Twelve", 12);
- put("Thirteen", 13);
- put("Fourteen", 14);
- put("Fifteen", 15);
- put("Sixteen", 16);
- put("Seventeen", 17);
- put("Eighteen", 18);
- put("Nineteen", 19);
- put("Twenty", 20);
- put("Thirty", 30);
- put("Forty", 40);
- put("Fifty", 50);
- put("Sixty", 60);
- put("Seventy", 70);
- put("Eighty", 80);
- put("Ninety", 90);
- put("Hundred", 100);
- put("Thousand", 1_000);
- put("Million", 1_000_000);
- put("Billion", 1_000_000_000);
- }};
- }
- public static int wordsToNumber(String word) {
- String[] words = word.split(" ");
- if ("Zero".equals(words[0])) {
- return 0;
- }
- int i = 0;
- Stack<Integer> stack = new Stack<>();
- int num = 0;
- while (i < words.length) {
- int cur = WORDS.get(words[i++]);
- if (cur < 100) {
- num += cur;
- } else if (cur < 1_000) {
- num *= cur;
- } else {
- num *= cur;
- stack.push(num);
- num = 0;
- }
- }
- while (!stack.isEmpty()) {
- num += stack.pop();
- }
- return num;
- }
- }
复制代码
|
|