13. 罗马数字转整数
解析罗马字符串
执行用时:2 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗:41.1 MB, 在所有 Java 提交中击败了63.58%的用户
/**
* 罗马数字由 `I,V,X,L,C,D,M` 组成
* 如果小数值在大数值左边,则用减法,如 `IV = 5 - 1 = 4`
* 如果小数值在大数值右边,则用加法,如 `VI = 5 + 1 = 5`
*
* 总而言之,如果小数值在大数值右边,则做加法,否则做减法
*/
class Solution {
public int romanToInt(String s) {
int sum = 0;
// 用于存放上一位,初使化为第 0 位,for 从 1 开始
int preNum = getValue(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
int num = getValue(s.charAt(i));
if (num > preNum) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
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;
}
}
}