您的位置:首页 > 其它

leetcode 13 roman to integer

2017-02-22 21:56 447 查看
感觉13roman to integer比12integer to roman 要难一些。但是前者的难度是easy,后者难度是medium.

首先看下 integer to roman,

string roman[][10]  = {
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "M", "MM", "MMM"}
};
int digit=0,temp=0;
string r;
while(num!=0)
{
temp=num%10;
r=roman[digit][temp]+r;
num/=10;
digit++;
}
return r;


就是给个二维数组,自己去数组里面找就OK了。

roman to integer的话。要考虑后面的数字比前面的大这种情况(比如IX,CD)。自己一开始写的代码是:

map<char,int> a={ {'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000} };
int len=s.size();
int sum=0;
int b[len];
int i;
for(i=len-1;i>0;)
{
if(a[s[i]]<=a[s[i-1]])
{
b[i]=1;
i--;
}
else
{
b[i]=1,b[i-1]=-1;
i-=2;
}
}
if(i==0)
b[i]=1;
for(i=0;i<len;i++)
{
sum+=a[s[i]]*b[i];
}
return sum;


再看看大神的代码:

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;


感到惭愧啊。其实思路是一样的,就是实现起来自己拐了很多弯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: