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;
    }
};

  

 

posted @ 2021-05-15 23:42  vdk  阅读(48)  评论(0)    收藏  举报