题目:

解题:
这是我一开始写的非常丑的解法,n个选择判断。。。
可拓展性太差了。。。
class Solution {
public:
int romanToInt(string s) {
int len=s.length();
int ans=0;
for(int i=0;i<len;i++){
if(i<len-1&&s[i]=='I'&&(s[i+1]=='V'||s[i+1]=='X')){
ans-=1;
}
else if(i<len-1&&s[i]=='X'&&(s[i+1]=='L'||s[i+1]=='C')){
ans-=10;
}
else if(i<len-1&&s[i]=='C'&&(s[i+1]=='D'||s[i+1]=='M')){
ans-=100;
}
else{
if(s[i]=='I'){
ans+=1;
}else if(s[i]=='V'){
ans+=5;
}else if(s[i]=='X'){
ans+=10;
}else if(s[i]=='L'){
ans+=50;
}else if(s[i]=='C'){
ans+=100;
}
else if(s[i]=='D'){
ans+=500;
}
else if(s[i]=='M'){
ans+=1000;
}
}
}
return ans;
}
};
官方题解:
官方利用一个哈希表存储了罗马数字和值的对应关系,一开始也想到了。
看起来逻辑非常清晰。
下面是我仿照写的:
class Solution {
private:
unordered_map<char,int> symbollist{
{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000},
};
public:
int romanToInt(string s) {
int ans=0;
int len=s.length();
for(int i=0;i<len;i++){
if(i<len-1&&symbollist[s[i]]<symbollist[s[i+1]]){
ans-=symbollist[s[i]];
}
else ans+=symbollist[s[i]];
}
return ans;
}
};

被折叠的 条评论
为什么被折叠?



