罗马数字居然一次AC了,太出乎意料了(关于罗马数字是如何表示的可以上网查)
<span style="font-family:Microsoft YaHei;font-size:14px;">int romanToInt(char *s) {
if(s == NULL || strlen(s) == 0) return 0;
int len = strlen(s);
int i;
int sum = 0;
for(i = 0; i < len; i++){
switch(s[i]){
case 'M':
sum += 1000;
break;
case 'D':
sum += 500;
break;
case 'C':
if(i+1 < len && s[i+1] == 'D'){
sum += 400;
i++;
}else if(i+1 < len && s[i+1] == 'M'){
sum += 900;
i++;
}else
sum += 100;
break;
case 'L':
sum += 50;
break;
case 'X':
if(i+1 < len && s[i+1] == 'L'){
sum += 40;
i++;
}else if(i+1 < len && s[i+1] == 'C'){
sum += 90;
i++;
}else
sum += 10;
break;
case 'V':
sum += 5;
break;
case 'I':
if(i+1 < len && s[i+1] == 'V'){
sum += 4;
i++;
}else if(i+1 < len && s[i+1] == 'X'){
sum += 9;
i++;
}else
sum += 1;
break;
}
}
return sum;
}</span>
<span style="font-family:Microsoft YaHei;">public int romanToInt(String s) {
int sum=0;
if(s.indexOf("IV")!=-1){sum-=2;} //IV本应该为4,结果算成了6,所以要减2
if(s.indexOf("IX")!=-1){sum-=2;}
if(s.indexOf("XL")!=-1){sum-=20;}
if(s.indexOf("XC")!=-1){sum-=20;}
if(s.indexOf("CD")!=-1){sum-=200;}
if(s.indexOf("CM")!=-1){sum-=200;}
char c[]=s.toCharArray();
int count=0;
for(;count<=s.length()-1;count++){
if(c[count]=='M') sum+=1000;
if(c[count]=='D') sum+=500;
if(c[count]=='C') sum+=100;
if(c[count]=='L') sum+=50;
if(c[count]=='X') sum+=10;
if(c[count]=='V') sum+=5;
if(c[count]=='I') sum+=1;
}</span>
<span style="font-family:Microsoft YaHei;"> return sum;
}</span>
第二种:
<span style="font-family:Microsoft YaHei;font-size:14px;"> class Solution {
public:
int romanToInt(string s) {
int num = 0;
int size = s.size();
for (int i = 0; i < size; i++) {
if (i < (size - 1) && romanCharToInt(s[i]) < romanCharToInt(s[i + 1])) { //如果出现了逆序,则减,否则,加,这种解法比我的更简洁,我的多了判断,其实没有必要
num -= romanCharToInt(s[i]);
} else {
num += romanCharToInt(s[i]);
}
}
return num;
}
int romanCharToInt(char c) {
switch (c) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
};</span>