leetcode13——Roman to Integer

題目大意:將羅馬數字字符串轉換成整數

分析:

方法一:最簡單的思路。switch case從左到右依次判斷字符,將當前tmp加入ans。

方法二:轉換問題本質。原題=>當左邊字母<右邊字母,就做減法,否則就做加法。

代碼:

方法一:

class Solution {
public:
    int romanToInt(string s) {
        int ans = 0;
        int index = 0;
        while(index < s.size()) {
            int tmp = 0;
            switch(s[index]) {
                case 'I':
                    if (s[index + 1] == 'V') {
                        tmp = 4;
                        index++;
                    } else if (s[index + 1] == 'X') {
                        tmp = 9;
                        index++;
                    } else {
                        tmp = 1;
                    }
                    break;
                case 'V':
                    tmp = 5;
                    break;
                case 'X':
                    if (s[index + 1] == 'L') {
                        tmp = 40;
                        index++;
                    } else if (s[index + 1] == 'C') {
                        tmp = 90;
                        index++;
                    } else {
                        tmp = 10;
                    }
                    break;
                case 'L':
                    tmp = 50;
                    break;
                case 'C':
                    if (s[index + 1] == 'D') {
                        tmp = 400;
                        index++;
                    } else if (s[index + 1] == 'M') {
                        tmp = 900;
                        index++;
                    } else {
                        tmp = 100;
                    }
                    break;
                case 'D':
                    tmp = 500;
                    break;
                case 'M':
                    tmp = 1000;
                    break;
            }
            ans += tmp;
            index++;
        }
        return ans;
    }
};

方法二:

class Solution {
public:
    int romanToInt(string s) {
        int ans = 0;
        for (int i = 0;i < s.size();i++) {
            int l = getValue(s[i]), r = getValue(s[i + 1]);
            if (l >= r) ans += l;
            else ans -= l;
        }
        return ans;
    }
    int getValue(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;
        }    
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章