LeetCode

LeetCode-13 罗马数字转整数

nkul · 9月27日 · 2020年 · 25次已读
个位123456789
IIIIIIIVVVIVIIVIIIIX
十位102030405060708090
XXXXXXXXLLLXLXXLXXXXC
百位100200300400500600700800900
CCCCCCCDDDCDCCDCCCCM
千位100020003000
MMMMMMM

除去4和9列,其他列都是一个字母对应一个数,加起来即可。
而4和9列,右边减去左边就是对应的数。

找一下规律就是如果该字母对应的数小于下一个字母,则减去!

class Solution {
public:
    int romanToInt(string s) {
        //除去特殊的4和9,每个字母相加即可,而4和9,前一个字母比后一个字母要小,减去即可!
        unordered_map heap;
        heap['I'] = 1;
        heap['V'] = 5;
        heap['X'] = 10;
        heap['L'] = 50;
        heap['C'] = 100;
        heap['D'] = 500;
        heap['M'] =1000;
        int res = 0 ;
        for(int i = 0;i < s.size() ; i++){
            if(i+1 < s.size() && heap[s[i]] < heap[s[i+1]]){
                res -= heap[s[i]];
            }else{
                res += heap[s[i]];
            }
        }
        return res;
     }
};


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!