题目
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;
}
};