Leetcode -- Roman to Integer

題目:

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

羅馬數字:

‘I’ -- 1, ‘V’ -- 5, ‘X’ -- 10, ‘L‘ -- 50, ’C‘ -- 100, ’D‘ -- 500, ’M‘ -- 1000 。 其中,IV表示4, VI表示6

思路:

採用map方式,建立羅馬char與數字的映射。

值得注意的是,在羅馬數字裏,IV表示4, VI表示6。因此要從後向前遍歷,當前一個數比後一個數小,應該在總值上,減去這個值。e.g IV中,V表示5. I表示1. 因爲I在V的前面,所以實際表示的數是4.

代碼(C++):

int romanToInt(string s) {
        map<char, int> map1;
        map1['I'] = 1;
        map1['V'] = 5;
        map1['X'] = 10;
        map1['L'] = 50;
        map1['C'] = 100;
        map1['D'] = 500;
        map1['M'] = 1000;    
        int len = s.length();
        int num = 0;
        int n;
        for(int i =  len -1; i>=0; i--)
        {
            n = map1[s[i]];
            if(i < len -1 && n < map1[s[i+1]])
            {
                num = num - n;
            }
            else
            {
                num = num + n;
            }
        }
        return num;
    }


PS:C++語法都不懂,用C++刷題,簡直是自虐啊!!


發佈了40 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章