在别处看到了有用STL中的map实现的,并且在LeetCode中运行通过:
Runtime | Memory |
---|---|
40ms | 10.8MB |
具体代码如下:
class Solution {
public:
int romanToInt(string s) {
int result = 0;
int a[] = {1, 5, 10, 50, 100, 500, 1000};
char b[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
map <char, int> m;
for(int i=0;i<7;i++){
m.insert(pair<char,int>(b[i],a[i]));
}
for(int i=0;i<s.length()-1;i++){
if(m[s[i]]>=m[s[i+1]])
result += m[s[i]];
else
result -= m[s[i]];
}
result+=m[s[s.length()-1]];
return result;
}
};
还有其他不用STL解决的方法:
使用switch语句
Runtime | Memory |
---|---|
16ms | 8.3MB |
class Solution {
public:
int romanToInt(string s) {
int result = 0;
for(int i=0; i<s.size();i++){
switch(s[i]){
case'M': result+=1000;
break;
case'D':result+=500;
break;
case'C':if(i+1<s.size()&&(s[i+1]=='M'||s[i+1]=='D')) result-=100;else result+=100;
break;
case'L':result+=50;
break;
case'X':if(i+1<s.size()&&(s[i+1]=='L'||s[i+1]=='C')) result-=10;else result+=10;
break;
case'V':result+=5;
break;
case'I':if(i+1<s.size()&&(s[i+1]=='V'||s[i+1]=='X')) result-=1;else result+=1;
break;
}
}
return result;
}
};