这还是一道简单题,但是如果想不到相邻字符串之间的关系,就很难有思路。
例:‘IV’对应4,‘VI’对应5;‘IX’对应9,‘XI’对应11。那么如果一个字符对应的数字比它下一位字符对应的数字大,那么我们就应该加上该字符对应的数字,反之就要减去。
#include <string.h> //稳妥起见写上字符串库
int Judge(char x) //对应的表函数
{
switch(x)
{
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; //因为写在函数里,所以return就会退出,无需break
}
return 0; //象征性地写一写否则会报错
}
int romanToInt(char * s){
int len = strlen(s);
int result = 0;
for(int i=0;i<len;i++)
{
if(i<len-1&&Judge(s[i])<Judge(s[i+1])) result -= Judge(s[i]);
//if的前一个条件可以有效避免索引越界,后一个则是判断是否后字符更大
else result += Judge(s[i]);
//其它情况下加起来就好,最后一个字符也是加
}
return result;
}
class Solution:
def romanToInt(self, s: str) -> int:
dic = { 'I':1, #一个映射字典
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000
}
result = 0 #实现方法和c语言相同
for i in range(len(s)):
if i<len(s)-1 and dic[s[i]] < dic[s[i+1]]:
result -= dic[s[i]]
else:
result += dic[s[i]]
return result