12. Integer to Roman
- 罗马数字规则
题目
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
思路
- 罗马数字规则
- 基本表达:I = 1; V = 5; X = 10; L = 50; C = 100; D = 500; M = 1000;
- 相同数字相连或者小数在大数后面,则表示这些数字相加所得的数,如III=3,CII=102;
- 小数(限于I, X, C)在大数前面,则表示大数减小数所得的数,如IV=4;
- 复杂性分析:
- 时间复杂度:O(n).
- 空间复杂度:O(1).
题解
class Solution {
public:
string intToRoman(int num) {
string ans;
string romanNum[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int numValue[] = {1000,900,500,400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
for (int i = 0; num != 0; i++) {
while (num >= numValue[i]) {
num -= numValue[i];
ans += romanNum[i];
}
}
return ans;
}
};