跳转至

12.整数转罗马数字 (Medium)*

题目描述*

标签*

贪心;

思路 & 代码*

主要看这么麻烦的就是 4, 9, 40, 90 这种数。如果一点点判断感觉很麻烦,但是把这些情况都记录一下就行了。

class Solution {
public:
    string intToRoman(int num) {
        vector<pair<int, string>> strMap = {
            {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, {100, "C"}, {90, "XC"},
            {50, "L"}, {40, "XL"}, {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}
        };
        int len = strMap.size();
        string res = "";
        for(int i = 0; i < len; i++) {
            while(num >= strMap[i].first) {
                num -= strMap[i].first;
                res += strMap[i].second;
            }
        }
        return res;
    }
};
class Solution {
public:
    string intToRoman(int num) {
        // 0, 1000, 2000, 3000
        vector<string> M = {"", "M", "MM", "MMM"}; 
        // 0, 100, 200, ..., 900
        vector<string> C = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        // 0, 10, 20, ..., 90
        vector<string> X = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        // 0, 1, 2, ..., 9
        vector<string> I = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        return M[num / 1000] + C[(num % 1000) / 100]+ X[(num % 100) / 10] + I[num % 10];
    }
};

最后更新: July 23, 2022