13. 罗马数字转整数

这题规则看似比较复杂,其实好好梳理一下也就这么几种情况。

按照两个字符和一个字符分好类,建立一个hashtable,然后打表就行了。

注意先打2个字符的表,命中不了再打1个字符的。(因为如果打一个字符的肯定能命中,这样会遗漏两个字符的情况)

 

代码:

 1 /**
 2              * @param {string} s
 3              * @return {number}
 4              */
 5             var romanToInt = function(s) {
 6                 let table = {
 7                     'I': 1,
 8                     'V': 5,
 9                     'X': 10,
10                     'L': 50,
11                     'C': 100,
12                     'D': 500,
13                     'M': 1000,
14                     'IV': 4,
15                     'IX': 9,
16                     'XL': 40,
17                     'XC': 90,
18                     'CD': 400,
19                     'CM': 900
20                 };
21                 let i = 0, res = 0;
22                 while(i < s.length){
23                     let flag = false;
24                     // 两个的情况
25                     if(i+1 < s.length){
26                         let cur = s.substring(i, i+2);
27                         if(table.hasOwnProperty(cur)){
28                             res += table[cur];
29                             i+=2;
30                             flag = true;
31                         }
32                     }
33                     if(!flag){
34                         // 没命中两个
35                         let cur = s.substring(i, i+1);
36                         if(table.hasOwnProperty(cur)){
37                             res += table[cur];
38                         }
39                         i++;
40                     }
41                 }
42                 return res;
43             };

 

posted @ 2022-04-06 11:03  BJFU-VTH  阅读(24)  评论(0编辑  收藏  举报