題目
https://leetcode-cn.com/problems/integer-to-roman/submissions/
羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。
字符 數值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
要將這個數字用羅馬數字表示,首先根據題目的規則得到13種羅馬數字的表示,就是這兩個一一對應的數組:
vectorstr={“I”,“IV”,“V”,“IX”,“X”,“XL”,“L”,“XC”,“C”,“CD”,“D”,“CM”,“M”};
vectornums{1,4,5,9,10,40,50,90,100,400,500,900,1000};
然後利用貪心算法的思想,每次找出nums裏面小於等於目標數字的最大元素,例如,
1200,滿足條件的最大值就是1000,然後讓最後輸出的羅馬數字字符串加上這個數字對應的字符串,再讓目標數字減去這個滿足條件的最大值,因爲現在是滿足條件的最大值,所以下次尋找最大值的時候就只需要從這個數字開始往前尋找就可以了,最大值後面的數字大於最大值,肯定不會滿足條件,這樣一遍遍的循環,直到最後目標數字減爲0就可以了,代表全部轉化完成。
#cpp
class Solution {
public:
string intToRoman(int num) {
int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string result = "";
string romans[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
for (int i = 0; i < 13; i++) {
while (num >= values[i]) {
num -= values[i];
result += romans[i];
}
}
return result;
}
};