原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnsdi2/
解法一:
class Solution {
public int romanToInt(String s) {
int result = 0;
int preNum = getValue(s.charAt(0));
for (int i = 1 ; i < s.length(); i++) {
int num = getValue(s.charAt(i));
if (preNum < num) {
result -= preNum;
} else {
result += preNum;
}
preNum = num;
}
result += preNum;
return result;
}
private int getValue(char ch) {
switch (ch) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:
return 0;
}
}
}
思路:
罗马数字中小的数字在大的数字的右边。也就是说如果小写的在大写的右边,每个字符都是一个有效的数字,他表示的数字就是所有字符相加,比如VI就是5+1=6。
如果小写的在大写的左边,就是无效的,只有一种情况,就是这个小写的和大写的组成一个数字,比如IV表示的是5-1=4,