LeetCode 13. Roman to Integer

Roman to Integer

題目要求:給出一個羅馬數字,要求轉化爲整型數字。
題目給出的框架如下:

class Solution {
public:
    int romanToInt(string s) {

    }
};

先驗知識:

下面爲羅馬數字與阿拉伯數字的對照表:

羅馬數字 阿拉伯數字
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例1:DCXXI 621
例2:MXD 1490

解題思路

羅馬數字從右往左數,碰到更大的數就相加,碰到更小的數就相減。如上面所給的例子:DCXXI,從I開始,碰到的數越來越大,所以結果爲:1+10+10+100+500=621。
之所以從右邊開始算,而不從左邊開始算,是因爲規則簡單,即:碰到更大的則相加,碰到更小的則相減。如果是從左邊算的話,則碰到較大的數需要尋找左邊不小於該數的數字。如例2所示:MXD,當碰到D的時候,需要找到不小於D的數字M,計算XD之後才能得到MXD。
代碼實現如下:

class Solution {
public:
    int romanToInt(string s) {
        map<char, int> val;
        val['I'] = 1;
        val['V'] = 5;
        val['X'] = 10;
        val['L'] = 50;
        val['C'] = 100;
        val['D'] = 500;
        val['M'] = 1000;
        int sum = val[s[s.length() - 1]];
        for (int i = s.size() - 2; i >= 0; --i) {
            if (val[s[i]] < val[s[i + 1]])
                sum -= val[s[i]];
            else
                sum += val[s[i]];
        }
        return sum;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章