题目的描述如下:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
首先,罗马数字的表示方式如下:
M:1000
D:500
C:100
L:50
X:10
V:5
I:1
public static int romanToInt(String s) {
int x=0;
int []nums=new int[s.length()];
for(int i=0;i<s.length();i++){
switch(s.charAt(i)){
case 'M': nums[i]=1000;
break;
case 'D': nums[i]=500;
break;
case 'C': nums[i]=100;
break;
case 'L': nums[i]=50;
break;
case 'X': nums[i]=10;
break;
case 'V': nums[i]=5;
break;
case 'I': nums[i]=1;
break;
}
}
int sum=0;
int i=0;
int sum1=0;
int flag=0;
for(;i<s.length()-1;i++){
if(nums[i]<nums[i+1]){
sum=sum-nums[i];
if(flag==1){
sum=sum-sum1;
sum1=0;
flag=0;
}
}
else if(nums[i]>nums[i+1]){
sum=sum+nums[i];
if(flag==1){
sum=sum+sum1;
sum1=0;
flag=0;
}
}
else if(nums[i]==nums[i+1]){
sum1=sum1+nums[i];
flag=1;
}
}
sum=sum+nums[i]+sum1;
return sum;
}
我使用的是这样一种方法,先将字符串转换为int形数组存储,然后对于数组内容进行加减运算。
其中,为了处理类似于XIII这样的以及MMCC这样的重复的数字比较问题,设立了一个flag如上所示。