首页 > 其他 > 详细

leetcode13. 罗马数字转整数

时间:2021-05-16 01:19:36      阅读:23      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

技术分享图片

 

 


 

 

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

技术分享图片

 

 

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. 罗马数字转整数

原文:https://www.cnblogs.com/hyffff/p/14772935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!