public static int getValue(char c){
switch (c){
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;
}
}
public static int romanToInt(String s) {
if (s == null || s.length() == 0){
return 0;
}
//拿到第一个值
int perSum = getValue(s.charAt(0));
int sum = 0;
for (int i = 1; i < s.length(); i++) {
//如果前面的值比后面的值大
if (perSum >= getValue(s.charAt(i))){
sum += perSum;
}else {
sum -= perSum;
}
perSum = getValue(s.charAt(i));
}
sum += perSum;
return sum;
}
1、sum将当前值纳入,但是在纳入之前要和后者进行比较,如果小于后者,则sum-=当前值;否则sum+=当前值;
2、eg. IV:5 -1 ; sum = - I + V; 即sum = -1 + 5 = 4;
3、假设末尾值为b,倒数第二位为a;
注意要将末尾值纳入sum中,且一定为加号(+b);因为即便a < b;sum 会进行-a操作,末尾数字纳入sum中一定为加号。