leetcode-13 Roman to Integer

来源:互联网 发布:制作ico图标软件 编辑:程序博客网 时间:2024/05/10 06:21

罗马数字居然一次AC了,太出乎意料了(关于罗马数字是如何表示的可以上网查)

<span style="font-family:Microsoft YaHei;font-size:14px;">int romanToInt(char *s) {    if(s == NULL || strlen(s) == 0) return 0;    int len = strlen(s);    int i;    int sum = 0;    for(i = 0; i < len; i++){        switch(s[i]){            case 'M':                sum += 1000;                break;            case 'D':                sum += 500;                break;            case 'C':                if(i+1 < len && s[i+1] == 'D'){                    sum += 400;                    i++;                }else if(i+1 < len && s[i+1] == 'M'){                    sum += 900;                    i++;                }else                    sum += 100;                break;            case 'L':                sum += 50;                break;            case 'X':                if(i+1 < len && s[i+1] == 'L'){                    sum += 40;                    i++;                }else if(i+1 < len && s[i+1] == 'C'){                    sum += 90;                    i++;                }else                    sum += 10;                break;            case 'V':                sum += 5;                break;            case 'I':                 if(i+1 < len && s[i+1] == 'V'){                    sum += 4;                    i++;                }else if(i+1 < len && s[i+1] == 'X'){                    sum += 9;                    i++;                }else                    sum += 1;                break;        }    }    return sum;}</span>


网上看到的两种超屌的解法:

<span style="font-family:Microsoft YaHei;">public int romanToInt(String s) {     int sum=0;    if(s.indexOf("IV")!=-1){sum-=2;} //IV本应该为4,结果算成了6,所以要减2    if(s.indexOf("IX")!=-1){sum-=2;}    if(s.indexOf("XL")!=-1){sum-=20;}    if(s.indexOf("XC")!=-1){sum-=20;}    if(s.indexOf("CD")!=-1){sum-=200;}    if(s.indexOf("CM")!=-1){sum-=200;}    char c[]=s.toCharArray();    int count=0;   for(;count<=s.length()-1;count++){       if(c[count]=='M') sum+=1000;       if(c[count]=='D') sum+=500;       if(c[count]=='C') sum+=100;       if(c[count]=='L') sum+=50;       if(c[count]=='X') sum+=10;       if(c[count]=='V') sum+=5;       if(c[count]=='I') sum+=1;   }</span><span style="font-family:Microsoft YaHei;">   return sum;}</span>

第二种:
<span style="font-family:Microsoft YaHei;font-size:14px;">  class Solution {    public:        int romanToInt(string s) {            int num = 0;            int size = s.size();            for (int i = 0; i < size; i++) {                if (i < (size - 1) && romanCharToInt(s[i]) < romanCharToInt(s[i + 1])) { //如果出现了逆序,则减,否则,加,这种解法比我的更简洁,我的多了判断,其实没有必要                    num -= romanCharToInt(s[i]);                } else {                    num += romanCharToInt(s[i]);                }            }            return num;        }        int romanCharToInt(char c) {            switch (c) {                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;                default:    return 0;            }        }    };</span>


0 0
原创粉丝点击