leetcode13. 罗马数字转整数

Posted vdk

tags:

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

 

 

 


 

 

这是个自动机问题,而且是简单题,就不做注解了。

 

 

class Solution {
public:
    int romanToInt(string s) {
        int status=0;
        int num=0;
        int i=0;
        while(i<s.length()){
            cout<<i<<" "<<num<<endl;
            switch(status){
                case 0:
                    if(s[i]==\'L\'){
                        num+=50;
                    }
                    if(s[i]==\'D\'){
                        num+=500;
                    }
                    if(s[i]==\'M\'){
                        num+=1000;
                    }
                    if(s[i]==\'V\'){
                        num+=5;
                    }
                    if(s[i]==\'I\'){
                        status=1;
                    }
                    if(s[i]==\'X\'){
                        status=10;
                        
                    }
                    if(s[i]==\'C\'){
                        status=100;
                        
                    }
                    i++;
                    break;
                case 1:
                    if(s[i]==\'V\'){
                        num+=4;
                        status=0;
                        i++;
                        
                    }else if(s[i]==\'X\'){
                        num+=9;
                        status=0;
                        i++;   
                    }else{
                        num+=1;
                        status=0;
                    }
                    break;
                case 10:
                    if(s[i]==\'L\'){
                        num+=40;
                        status=0;
                        i++;
                        
                    }else if(s[i]==\'C\'){
                        num+=90;
                        status=0;
                        i++;   
                    }else{
                        num+=10;
                        status=0;
                    }
                    break;
                case 100:
                    if(s[i]==\'D\'){
                        num+=400;
                        status=0;
                        i++;
                        
                    }else if(s[i]==\'M\'){
                        num+=900;
                        status=0;
                        i++;   
                    }else{
                        num+=100;
                        status=0;
                    }
                    break;
            }
        }
        cout<<num<<endl;
        return num+status;
    }
};

  

 

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

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

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

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

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

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

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