PROBLEM:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
SOLVE:
结论:罗马数字的计数方法是:比较当前数字与后一个数字的大小,如果大就加上该数,否则减去。
C++
class Solution {
public:
int romanToInt(string s) {
if(s.empty())
return 0;
unordered_map<char,int> roman={{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000}};
int output=roman[s.back()];
for(int i=0;i<s.length()-1;i++){
if(roman[s[i]]<roman[s[i+1]])
output-=roman[s[i]];
else
output+=roman[s[i]];
}return output;
}
};
Python3
class Solution:
def romanToInt(self, s):
roman = {'M': 1000,'D': 500 ,'C': 100,'L': 50,'X': 10,'V': 5,'I': 1}
z = 0
for i in range(0, len(s) - 1):
if roman[s[i]] < roman[s[i+1]]:
z -= roman[s[i]]
else:
z += roman[s[i]]
return z + roman[s[-1]]