https://leetcode.com/problems/roman-to-integer/description/
主要是掌握罗马数字和阿拉伯数字的转换规律,剩下的按照正常思路应该没啥难度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int """ convertDict={ 'I':1, 'X':10, 'C':100, 'M':1000, 'V':5, 'L':50, 'D':500 } num=0 for i in range(len(s)): if i>0: if convertDict[s[i]]<=convertDict[s[i-1]]: num=num+convertDict[s[i]] else: num=num+convertDict[s[i]]-2*convertDict[s[i-1]] else: num=num+convertDict[s[i]] return num
|
用时 162ms,感觉比平均要慢,但是除了想到缓存变量,减少判断以外想不到太好的算法上的改进方法。
使用 Java 的 HashMap 重写,思路和 Python 不变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public int romanToInt(String s) { HashMap<Character,Integer> r2n_map= new HashMap<Character,Integer>(){{ put('I',1); put('V',5); put('X',10); put('L',50); put('C',100); put('D',500); put('M',1000); }}; int s_len=s.length(); int s_int=0; for(int i=0;i<s_len;i++){ int now_num=r2n_map.get(s.charAt(i)); if((i<s_len-1)&&(now_num<r2n_map.get(s.charAt(i+1)))){ s_int-=now_num; }else{ s_int+=now_num; } } return s_int; } }
|