将罗马数字字符串转换为阿拉伯整形数 Roman to Integer

来源:互联网 发布:上古卷轴5字体优化 编辑:程序博客网 时间:2024/06/06 00:48

题目源自于leetcode,和前一道是正好相反的计算。

另一道题在http://blog.csdn.net/ojshilu/article/details/12836795

思路:需要进行字符串的匹配,但是罗马数字并不是前/后缀编码,暂时没有想到好的方法。所以就枚举吧。


代码:

class Solution {public:    int romanToInt(string s) {        string cost[][10] = {{"","I","II","III","IV","V","VI","VII","VIII","IX"},                             {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},                             {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},                             {"","M","MM","MMM",""}};int value[] = {1,10,100,1000};        int result = 0;        int n = s.length()-1;        int idx = 0;        while(n>=0)        {            if(n>=3 && s.substr(n-3,4) == cost[idx][8] )            {                   result += 8*value[idx];                  n-=4;             }            else if(n>=2 && s.substr(n-2,3) == cost[idx][3] )            {                result += 3*value[idx];                n-=3;            }            else if(n>=2 &&  s.substr(n-2,3) == cost[idx][7] )            {                result += 7*value[idx];                n-=3;            }                            else if(n>=1 &&  s.substr(n-1,2) == cost[idx][2] )            {                result += 2*value[idx];                n-=2;            }            else if(n>=1 && s.substr(n-1,2) == cost[idx][4] )            {                result += 4*value[idx];                n-=2;            }              else if(n>=1 &&  s.substr(n-1,2) == cost[idx][6] )            {                result += 6*value[idx];                n-=2;            }            else if(n>=1 &&  s.substr(n-1,2) == cost[idx][9] )            {                result += 9*value[idx];                n-=2;            }            else if( s.substr(n,1) == cost[idx][1] )            {                result += 1*value[idx];                n--;            }            else if(s.substr(n,1) == cost[idx][5] )            {                result += 5*value[idx];                n--;            }            idx++;        }        return result;    }};

注意:string类型取子字符串的时候,怎么取?用substr函数。其第一个参数不可以越界、也不可以小于0,否则程序会崩。所以调用之前要做好判断。


原创粉丝点击