leetcode 13. 罗马数字转整数

微笑、不失礼 提交于 2019-12-02 14:28:53

我觉得这个就是简单的前进问题,用不到动态规划,只是向前前进几个值就可以了。多用几个if,遇见特殊的向前多检查几个字符,就是这样。

看看网上的,网上的方法就是构建出所有的子字符串数据,然后按照最大匹配原则匹配出来,真的牛。从没有规律的地方发现规律,从而简化代码。

总的数字有 I II III ,可以转化成一个I,77
IV,IX 4,9   77+86=163,77+88=165
XL,XC, 40,90 88+76=164,88+67=155
CD,CM 400, 900,67+68=135,67+77=144
在ascii码表中,I为73,V为86,X为88,L为76,C为67,D为68,M为77
因此划分一个200的数组就足够了

每次提取时,如果后面的字符比较大,那么它就是一个负数这样。但是需要注意的是不能有不合规矩的数。但此题是没有的。

成功了,真简单。

class Solution {
public:
    int romanToInt(string s) {
        int arr[200];
        arr['I'] = 1;
        arr['V'] = 5;
        arr['X'] = 10;
        arr['L'] = 50;
        arr['C'] = 100;
        arr['D'] = 500;
        arr['M'] = 1000;
        int res = 0;
        int n = s.size();
        if(n == 0) return 0;
        for(int i=0; i<n; i++){
            if((i!=n-1) && (arr[s[i+1]]>arr[s[i]])){ // 如果后面的数比前面的数大
                res += arr[s[i]]*(-1);
            }
            else{
                res += arr[s[i]];
            }  
        }
        return res;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!