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;
}
}
罗马数字采用七个罗马字母作数字、即Ⅰ(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--13. Roman to Integer
- 2017.10.21 LeetCode - 13. Roman to Integer - 28. Implement strStr()
- leetcode 13. Roman to Integer
- LeetCode-13. Roman to Integer(罗马数字转阿拉伯数字)
- 13. Roman to Integer leetcode Python 2016 new Season
- leetcode 每日一题 13. Roman to Integer
- [LeetCode] 13. Roman to Integer ❤
- LeetCode——13. Roman to Integer
- Leetcode 13. Roman to Integer
- LeetCodet题解--13. Roman to Integer
- LeetCode 13. Roman to Integer
- [Leetcode] 13. Roman to Integer
- Leetcode 13. Roman to Integer
- LeetCode - 13. Roman to Integer
- 【LeetCode】13. Roman to Integer
- leetcode:13. Roman to Integer
- Leetcode-13. Roman to Integer
- leetcode 13. Roman to Integer
- leetcode题解-13. Roman to Integer
- LeetCode 13. Roman to Integer