//我的小破码
class Solution {
public:
int romanToInt(string s) {
int len=s.size();
int *a=new int[len];
int ans=0;
string rom="MDCLXVI";
int value[]={1000,500,100,50,10,5,1};
for (int i=0;i<s.size();i++){
for(int j=0;j<7;j++){
if (s.substr(i,1)==rom.substr(j,1))
{a[i]=value[j];
break;}
}
}
for(int i=0;i<s.size()-1;i++){
if (a[i]<a[i+1])
ans-=a[i];
else
ans+=a[i];
}
return ans+a[len-1];
}
};
- 很简单的题要死要活。主要的思路还是看来的。可能因为不是很懂罗马数字的规则?
- 还有字符串啊,指针之类的概念也不够清楚。
- map类型好像很好用!!好多题都可以用它!要学!!!
//讨论区的别人家的码
int romanToInt(string s)
{
unordered_map<char, int> T = { { 'I' , 1 },
{ 'V' , 5 },
{ 'X' , 10 },
{ 'L' , 50 },
{ 'C' , 100 },
{ 'D' , 500 },
{ 'M' , 1000 } };
int sum = T[s.back()];
for (int i = s.length() - 2; i >= 0; --i)
{
if (T[s[i]] < T[s[i + 1]])
{
sum -= T[s[i]];
}
else
{
sum += T[s[i]];
}
}
return sum;
}
···