首页 » 编程之美 » 正文

[leetcode_13]Roman to Integer

这个和上一个题相反。

嘿嘿嘿,比较猥琐的我本来是想用上一个题,打一个3999的表,但是我觉得这样太不厚道了。
于是我选择了好好做题= =
当然上一个题的代码太多的switch 和 if else
所以。。。
我决定改进一下。
附上代码:依然是一次AC

class Solution {
public:
    int num;
    int romanToInt(string s) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        num = 0;
        string sub[] = {
            "CM","DCCC","DCC","DC","D","CD","CCC","CC","C",
            "XC","LXXX","LXX","LX","L","XL","XXX","XX","X",
            "IX","VIII","VII","VI","V","IV","III","II","I"
        };
        int q[] = {
            900,800,700,600,500,400,300,200,100,
            90,80,70,60,50,40,30,20,10,
            9,8,7,6,5,4,3,2,1
        };
        int i;
        for(i = 0;i < s.size();i++)
        {
            if(s[i] != 'M')
                break;
            else
                num += 1000;
        }
        s = s.substr(i,s.size());
        for(int i = 0;i < 27;i++)
        {
            s = stringtoint(s,i,sub,q);
        }
        return num;
    }
    string stringtoint(string s,int i,string sub[],int q[])
    {
        if(finds(s,sub[i]))
        {
            num += q[i];
            s = s.substr(sub[i].length(),s.size()-1);
        }
        return s;
    }
    bool finds(string s,string sub)
    {
        if(s.size() < sub.size())
            return false;
        for(int i = 0;i < sub.size();i++)
        {
            if(s[i] != sub[i])
                return false;
        }
        return true;
    }
};

发表评论