LeetCode题解(JAVA)
LeetCode13——罗马数字转整数
题目描述
思路
注意几种特殊情况的判断:
//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<len;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的情况
/**
*按照switch中的语句
*输入为IV时,如果不做特殊情况的讨论
*则会变成VI的计算结果:roman_int = I + V = roman_int + 1 + roman_int + 5 = 6
*VI与IV相当于相差了两个I,即1*2
**/
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;
}
}
提交代码