您的位置:首页 > 其它

leetcode(6)13. Roman to Integer

2016-11-18 16:44 531 查看
题意:将一个罗马数字转为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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode