地址:12. 整数转罗马数字 - 力扣(LeetCode) (leetcode-cn.com)
该题需要理解清楚整数转罗马数组的规则:
1.特殊的六种需特殊表示
2.例如:30 = XXX
由于规则的特殊性需要从先计算最高位,从高到低计算
class Solution {
public:
string intToRoman(int num) { //牛逼之处:用数组记录且为从大到小
int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string res;
for(int i=0; i<13; i++){
while(num>=values[i]){ //巧妙运用while处理
num -= values[i];
res += reps[i];
}
}
return res;
}
};
暴力解法:即使是暴力,但也挺难想的
string intToRoman(int num) {
string table[4][10] = { // 1~9
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
// 10~90
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
// 100~900
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
// 1000~3000
{"", "M", "MM", "MMM"}
};
string result;
int count = 0;
while(num > 0){
int temp = num % 10;
result = table[count][temp] + result;
num /= 10;
count++;
}
return result;
}