[TOC]
思路
用两个触点,刚开始的时候,使其分别指在s
和s+1
的位置上,这样做的目的是为了解决IV、IX、XL……的特殊情况。此时,程序就会先看是否出现IV……的情况,有,则取对应值,否则就看*p
,再取对应值。
解题方法
用两个触点,刚开始的时候,使其分别指在s
和s+1
的位置上,这样做的目的是为了解决IV、IX、XL……的特殊情况。此时,程序就会先看是否出现IV……的情况,有,则取对应值,否则就看*p
,再取对应值。
复杂度
时间复杂度:
空间复杂度:
Code
int romanToInt(char* s) {
int res = 0;
for(char *p = s, *q = s+1; *p; p++, q++) {
if(*p == 'I' && *q == 'V') {
res += 4; p++; q++;
} else if(*p == 'I' && *q == 'X') {
res += 9; p++; q++;
} else if(*p == 'X' && *q == 'L') {
res += 40; p++; q++;
} else if(*p == 'X' && *q == 'C') {
res += 90; p++; q++;
} else if(*p == 'C' && *q == 'D') {
res += 400; p++; q++;
} else if(*p == 'C' && *q == 'M') {
res += 900; p++; q++;
} else {
switch(*p) {
case 'I':
res += 1;
break;
case 'V':
res += 5;
break;
case 'X':
res += 10;
break;
case 'L':
res += 50;
break;
case 'C':
res += 100;
break;
case 'D':
res += 500;
break;
case 'M':
res += 1000;
break;
}
}
}
return res;
}