Every day a leetcode
题目来源:13. 罗马数字转整数
解法:模拟
对于输入的字符串的字符:
若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。
代码:
int romanToInt(char* s){
int symbolValues[26];
symbolValues['I'-'A'] = 1;
symbolValues['V'-'A'] = 5;
symbolValues['X'-'A'] = 10;
symbolValues['L'-'A'] = 50;
symbolValues['C'-'A'] = 100;
symbolValues['D'-'A'] = 500;
symbolValues['M'-'A'] = 1000;
int ans=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int value=symbolValues[s[i]-'A'];
if (i<n-1 && value<symbolValues[s[i+1]-'A'])
ans-=value;
else
ans+=value;
}
return ans;
}
结果: