Leetcode 13. 罗马数字转整数

52 阅读1分钟

题目

图片.png

思路

这里使用的是一个unordered_map,这个是无顺序的map,因为这里需要把字符和数字映射起来,且不要求顺序性。我觉得这里是解题的关键,明确了这个映射关系,剩下的都很好计算。就是对于4和9,40和90等情况,需要判断一下如果前面的字符对应的数字小于后面的,那么需要减去,别的都不变。

代码

class Solution {

private:

    unordered_map<char,int> symbolValues = {

        {'I',1},

        {'V',5},

        {'X',10},

        {'L',50},

        {'C',100},

        {'D',500},

        {'M',1000},

    };

public:

    int romanToInt(string s) {

        int len=s.size();

        int sum=0;

        for(int i=0;i<len-1;i++){

            if(symbolValues[s[i+1]]>symbolValues[s[i]]){

                sum=sum-symbolValues[s[i]];

            }

            else{

                sum=sum+symbolValues[s[i]];

            }

        }

        sum=sum+symbolValues[s[len-1]];

        return sum;

    }

};