题意:将一个罗马数字转为int
罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)
-
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
-
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
-
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
所以我们循环处理,再用if来控制两种不同的处理逻辑。
所以,其一我们知道了每个字母表示多少,又知道了通过比大小该加上这个值还是减去这个值,核心的逻辑就一定可以实现了。
public class Solution {
public int romanToInt(String s) {
if(s.length()==0)
return 0;
int sum = 0;
char[] arr = s.toCharArray();
for(int i=0; i<arr.length-1; i++)
{
if(convert(arr[i]) < convert(arr[i+1]))
sum -= convert(arr[i]);
else
sum += convert(arr[i]);
}
sum += convert(arr[arr.length-1]);
return sum;
}
private int convert(char c)
{
int x = 0;
switch(c)
{
case 'I':
x = 1;
break;
case 'V':
x = 5;
break;
case 'X':
x = 10;
break;
case 'L':
x = 50;
break;
case 'C':
x = 100;
break;
case 'D':
x = 500;
break;
case 'M':
x = 1000;
break;
}
return x;
}
}