天天看點

LeetCode 12. 整數轉羅馬數字 13. 羅馬數字轉整數12. 整數轉羅馬數字13. 羅馬數字轉整數

目錄

  • 12. 整數轉羅馬數字
  • 13. 羅馬數字轉整數

12. 整數轉羅馬數字

難度:中等

使用貪心的思想。

正确解法:

class Solution {
public:
    string intToRoman(int num) {
        string s = "";
        vector<string> str_list = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV",  "I"};
        vector<int> int_list = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

        int n = int_list.size();

        int k = 0, m = num;
        for(int i = 0; i < n; i++){
            k = m / int_list[i];
            m = m % int_list[i];
            if(k != 0){
                for(int j = 0; j < k; j++)s += str_list[i];
            }
        }
        return s;
    }
};
           

13. 羅馬數字轉整數

正确解法:

class Solution {
public:
    int romanToInt(string s) {
        map<char, int> dic;
        dic['I'] = 1;
        dic['V'] = 5;
        dic['X'] = 10;
        dic['L'] = 50;
        dic['C'] = 100;
        dic['D'] = 500;
        dic['M'] = 1000;
        int n = s.length();
        int ans = dic[s[0]];
        int last_num = ans;
        for(int i = 1; i < n; ++i){
            int now = dic[s[i]];
            ans += now;
            if(last_num < now){
                ans -= 2 * last_num;
            }
            last_num = now;
        }
        return ans;
    }
};
           

結果:

LeetCode 12. 整數轉羅馬數字 13. 羅馬數字轉整數12. 整數轉羅馬數字13. 羅馬數字轉整數