Leetcode: 13.Roman to Integer

Description

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

思路

  • 这个也没啥好说的吧,首先搞清楚罗马数字是个什么鬼?
  • 基本字符:I(1), V(5), X(10), L(50), C(100), D(500), M(1000)
  • 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3
  • 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、如:Ⅷ=8、Ⅻ=12
  • 小的数字(限于 I、X 和C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9
  • 正常使用时、连写的数字重复不得超过三次
  • 在一个数的上面画一条横线、表示这个数扩大 1000 倍。

代码

class Solution {
public:
    int romanToInt(string s) {
        int res = 0;
        int len = s.size();
        int i = 0;
        while(i < len){
            switch(s[i]){
                case 'M' : 
                    res += 1000;
                    break;
                case 'C':
                    if(i + 1 < len && (s[i + 1] == 'D' || s[i + 1] == 'M'))
                        res -= 100;
                    else res += 100;
                    break;
                case 'D':
                    res += 500;
                    break;
                case 'X':
                     if(i + 1 < len && (s[i + 1] == 'L' || s[i + 1] == 'C'))
                        res -= 10;
                    else res += 10;
                    break;
                case 'L':
                    res += 50;
                    break;
                case 'I':
                    if(i + 1 < len && (s[i + 1] == 'V' || s[i + 1] == 'X'))
                        res -= 1;
                    else res += 1;
                    break;
                case 'V':
                    res += 5;
                    break;
                default:
                    return 0;
            }
            i++;
        }
        
        return  res;
    }
};
posted @ 2017-05-06 13:22  JeffLai  阅读(131)  评论(0编辑  收藏  举报