您的位置:首页 > 其它

Leetcode简单题罗马数字转整数

2017-09-16 14:39 549 查看

题目来源:https://leetcode.com/problems/roman-to-integer/description/

题目简单描述:要求输入[1,3999]范围的罗马数字,能转换成整数输出。

题目分析:

罗马数字
罗马数字IVXLCDM
整数1510501005001000

规则:

相同的数字连写表示这些数字相加,如III表示3    
小的数字在大的数字左边,表示大的数字减去小的数字如IV表示数字4
小的数字在大的数字右边,表示全部相加,如VII表示为7
在一个数字上面画一条横线表示这个数字本身的值乘以1000,(此题中这种情况不予考虑)   

解题思路:

从左往右按字符扫描,若当前字符数值大于或者等于他后面的字符数值,则sum=sum+此字符的值,否则,sum = sum-此字符的值
对于最后一个字符,都是加在sum上的。
代码:
class Solution {
public int romanToInt(String s) {
char[] roman = s.toCharArray();
int sum = 0;
int s1 =0,s2=0;
Map<Character, Integer> m  = new HashMap<Character,Integer>(){{
put('I', 1);
put('V', 5);
put('X', 10);
put('L', 50);
put('C', 100);
put('D', 500);
put('M', 1000);
}};
for (int i = 0; i < roman.length-1; i++) {
s1 = (int)m.get(roman[i]);
s2 = (int)m.get(roman[i+1]);
if (s1>=s2) {
sum = sum +s1;
}
else {
sum = sum-s1;
}
}
sum += (int)m.get(roman[roman.length-1]);
return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: