LeetCode13——罗马数字转整数
- LeetCode题解(JAVA)
- 题目描述
- 思路
- 代码实现
题目描述
思路
注意几种特殊情况的判断:
//4, 9 IV,IX //40, 90 XL,XC //400, 900 CD,CM
其余的字母都有对应的整数值。
以58为例: 通过罗马字母规则来得到相加为58的各个整数。
58 = 50 + 8 = 50 + 5 + 3 = 50 + 5 + 1 + 1 + 1
因此,58对应的罗马字母为
L + V + I + I + I = LVIII
class Solution {
public int romanToInt(String s) {
int len = s.length();
int roman_int = 0;
for(int i = 0;i
//规定单个罗马字母对应的整数值。
switch(s.charAt(i)){
case 'I' : roman_int = roman_int + 1;break;
case 'V' : roman_int = roman_int + 5;break;
case 'X' : roman_int = roman_int + 10;break;
case 'L' : roman_int = roman_int + 50;break;
case 'C' : roman_int = roman_int + 100;break;
case 'D' : roman_int = roman_int + 500;break;
case 'M' : roman_int = roman_int + 1000;break;
default: System.out.println("default");break;
}
//当输入由多个罗马字母构成时,讨论他们的情况
if(i != 0){
//IV = 4, IX = 9
//当V的左边为I,或者X的左边为I的情况
if(((s.charAt(i)=='V')||(s.charAt(i)=='X'))&&(s.charAt(i-1)=='I')){
//重复用了两次I,所以乘以2
roman_int = roman_int-1*2;
}
//同理,XL = 40, XC = 90
if(((s.charAt(i)=='L')||(s.charAt(i)=='C'))&&(s.charAt(i-1)=='X')){
roman_int = roman_int-10*2;
}
//CM = 400, DM = 900
if(((s.charAt(i)=='D')||(s.charAt(i)=='M'))&&(s.charAt(i-1)=='C')){
roman_int = roman_int-100*2;
}
}
}
return roman_int;
}
}
提交代码



