leetcode 13 roman to integer

感觉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;

感到惭愧啊。其实思路是一样的,就是实现起来自己拐了很多弯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值