13. Roman to Integer

1.問題

2.想法

  • 提問

  • function header, parameter

  • test input

    • 前一個比後一個大的序列

    • 大小穿插

  • 說明想法

    • 只要i + 1 > i, 則 sum += (v[i + 1] - v[i]);

  • 測試計算複雜度: O(n)

3.程式碼

class Solution {
public:
    int romanToInt(string s) {
        unordered_map <char, int>m;
        vector<int> v;
        int size = s.length(), sum = 0;
        m['I'] = 1;
        m['V'] = 5;
        m['X'] = 10;
        m['L'] = 50;
        m['C'] = 100;
        m['D'] = 500;
        m['M'] = 1000;
        for (int i = 0; i < size; i++) {
            v.push_back(m[s[i]]);
        }
        int i = 0, lastOne = 0;
        while (i < size) {
            if (i != size - 1) {
                if (v[i] < v[i + 1]) {
                    sum += (v[i + 1] - v[i]);
                    i++;
                } else {
                    sum += v[i];
                }
            } else {
                sum += (v[size - 1]);
            }
            i++;
        }
        
        return sum;    
    }

};

Last updated