13. 罗马数字转整数

Posted Mrsdwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13. 罗马数字转整数相关的知识,希望对你有一定的参考价值。

思路:
一开始是打算用hash表来记录每个字母代表的数字的,但是想了一下好像直接if判断来加也可以,然后就开始if了。
然后想判断IV IX这类的的时候判断条件设置的是i!=n-1&&s[i+1]=\'V\'这样的,也是能做的,但是if太多了。

我这时候并没有想到IV这种情况可以概括为小的数放在大的数左边,然后用hash表记录了各种字母代表的数后还是用了很多if来写。

看了题解才直到是这个规律。罗马数从左到右是降序的,所以如果有小的数出现在大的数的左边,那么就减去小的数的值就可以了,那么很多if就可以只用一个条件来写了。
代码:

class Solution {
public:
    int Getvalue(char ch){
        switch(ch){
            case \'I\' : return 1;
            case \'V\' : return 5;
            case \'X\' : return 10;
            case \'L\' : return 50;
            case \'C\' : return 100;
            case \'D\' : return 500;
            case \'M\' : return 1000;
        };
        return 0;
    }
    int romanToInt(string s) {
        int n = s.length();
        int res=0;
        for(int i=0;i<n;++i){
            int temp = Getvalue(s[i]);
            if(i!=n-1&&temp<Getvalue(s[i+1])){
                res -= temp; 
            }
            else res+=temp;
        }
        return res;
    }
};

以上是关于13. 罗马数字转整数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 13. 罗马数字转整数

字符串13. 罗马数字转整数

LeetCode刷题13-简单-罗马数字转整数

LeetCode刷题13-简单-罗马数字转整数

LeetCode 13. 罗马数字转整数 java 两种解法

LeetCode 13. 罗马数字转整数 java 两种解法