利用C语言编写的,也是思考不出来,直接看的官解,理一下思路。
针对罗马数字,有一个规律:数字是叠加的,就像XI=10+1;但是有一个特例就是当左边的数字比右边的数字小的时候,是相减,就像IX = -1+10.这样就可以发现其中的规律了。
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;
}
疑问:针对C语言,emmm我有一块是没有接触过的,就是symbolValues['I' - 'A'] = 1;就是这么定义是什么意思。再就是为啥要把数组symbolValues[26]设置成26.