LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述在这里插入图片描述解题思路:
两种解题方法,第一种就是硬判断,把所有情况都考虑进去,一共十三种条件,怎么说还是有点麻烦的,代码如下:

class Solution {
public:
    int romanToInt(string s) {
        int res = 0;
        int len = s.length();
        for(int i = 0 ; i < len; i ++) {
            if(s[i] == 'I' && i < len - 1 && s[i + 1] == 'V') {
                res += 4;
                i ++;
            } else if (s[i] == 'I' && i < len - 1 && s[i + 1] == 'X') {
                res += 9;
                i ++;
            } else if (s[i] == 'I') {
                res += 1;
            } else if (s[i] == 'V') {
                res += 5;
            } else if (s[i] == 'X' && i < len - 1 && s[i + 1] == 'L') {
                res += 40;
                i ++;
            } else if (s[i] == 'X' && i < len - 1 && s[i + 1] == 'C') {
                res += 90;
                i ++;
            } else if (s[i] == 'X') {
                res += 10;
            } else if (s[i] == 'L') {
                res += 50;
            } else if (s[i] == 'C' && i < len - 1 && s[i + 1] == 'D') {
                res += 400;
                i ++;
            } else if (s[i] == 'C' && i < len - 1 && s[i + 1] == 'M') {
                res += 900;
                i ++;
            } else if (s[i] == 'C') {
                res += 100;
            } else if (s[i] == 'D') {
                res += 500;
            } else if (s[i] == 'M') {
                res += 1000;
            }
        }
        return res;
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/cliang-chong-fang-fa-by-heroding-mc3y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

第二种就是找规律,观察可以发现如果从左往右越来越小就是正常情况,一路加下去就行,如有变大,就要把中间夹着的小的数减掉,这种方法虽然简洁,但是效率不高,代码如下:

class Solution {
private:
    // 存储字符数值映射关系
    unordered_map<char, int> values = {
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000},
    };
public:
    int romanToInt(string s) {
        int res = 0;
        int len = s.length();
        for(int i = 0; i < len; i ++) {
            // 如果左边比右边小,减去
            if(i < len - 1 && values[s[i]] < values[s[i + 1]]) {
                res = res + values[s[i + 1]] - values[s[i]];
                i ++;
            } else {
                res += values[s[i]];
            }
        }
        return res;
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/cliang-chong-fang-fa-by-heroding-mc3y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 13 罗马数字转整数[找规律 多条件判断] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 13 罗马数字转整数

LeetCode 12 整数转罗马数字[硬编码 数学 找规律] HERODING的LeetCode之路

leetcode-13罗马字符转整数

Leetcode 233.数字1的个数

LeetCode﹝数学规律ி﹞第N位数字可怜的小猪

LeetCode13.罗马数字转整数(Python3)