leetcode-013 Roman to Integer
将罗马数字转为整数
思路:
(1)首先应该有个字典,存储罗马数字和阿拉伯数字之间的对应关系。
(2)遍历字符串,比较前后两个数的大小,如果后一个数比前一个数小,则加上后一个数,否则,减去后一个数。
为了防止数组索引越界,从后往前取,首先将最后一个数的值存进去,再一次和它的前一个数进行比较,如果前一格比它
大,则加上前一个,否则减去前一个。
java实现:
public int romanToInt2(String s) {
if(s==null||s.length()==0){
return -1;
}
HashMap<Character, Integer> map=new HashMap<Character,Integer>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int length=s.length();
int result=map.get(s.charAt(length-1));
for (int i =length-2; i >=0; i--) {
if(map.get(s.charAt(i+1))<=map.get(s.charAt(i))){
result+=map.get(s.charAt(i));
}else{
result-=map.get(s.charAt(i));
}
}
return result;
}
python实现:
class Solution:
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
length=len(s)
preval=0
result=0
for i in range(length-1,-1,-1):
value=dict[s[i]]
if(value>=preval):
result+=value
else:
result-=value
preval=value
return result