LeetCode-Roman to Integer

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;
}
}