================================================================================
做题须知:
【罗马数字】
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.
Which means:
I -> 1
V -> 5
X -> 10
L -> 50
C -> 100
D -> 500
M -> 1000
规律: 左减右加。 设一个指针,每次判断它的前一个是不是比它小, 小就从结果里减去。
=======================================================================
Code:
public class Solution {
public int romanToInt(String s) {
char [] t = s.toCharArray();
int cur = 1;
int res = toNum(t[0]);
while(cur < s.length()){
// minus
if(toNum(t[cur - 1]) < toNum(t[cur])){
res += toNum(t[cur]) - 2*toNum(t[cur - 1]);
} else{
// plus
res += toNum(t[cur]) ;
}
cur ++;
}
return res;
}
public int toNum(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;
}
return 0;
}
}
No comments:
Post a Comment