题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路
百度一下,查到罗马数字与int转换的对应表
那么问题就简单了,我们把String类型拆分为一个一个的char类型,查表对应到相应的阿拉伯数字中,在把所有数字加起来即可。
比如说“CXXIII”,转换过来就是100×1+10×2+1×3=123。
这样对吗?不对的,因为有一个漏洞,比如说四用罗马数字表示为“IV”,那么按照我们的方法转换过来就是1+5=6了。为什么答案会错呢,因为我们上述方法的前提是左边的罗马符号要始终比右边的罗马符号大,如果小的话,就是用右边大的减去左边小的,所以正确答案应该是5-1=4.
所以我们要有一个判断,判断每一位的char类型是不是比后面的要大,如果小,则取负号相加。
代码
public class Solution {
public int romanToInt(String s) {
int length = s.length();
int []n = new int[length];
for(int i = 0 ; i < length ; ++ i){
switch(s.charAt(i)){
case 'I':
n[i] = 1;
break;
case 'V':
n[i] = 5;
break;
case 'X':
n[i] = 10;
break;
case 'L':
n[i] = 50;
break;
case 'C':
n[i] = 100;
break;
case 'D':
n[i] = 500;
break;
case 'M':
n[i] = 1000;
break;
}
}
int num = 0;
for(int j = 0 ; j < length - 1 ; ++ j){
if(n[j] < n[j + 1]) num -= n[j];
else num += n[j];
}
num += n[length - 1];
return num;
}
}