Description:
https://leetcode.com/problems/integer-to-roman/#/description
Boundary:
when num = 0, 10, 100, 1000 (actually it’s not boundary)
Algorithm:
There is no better way than hard-coding. Use a 2D array to store the candidates and select.
Code:
class Solution {
public:
string intToRoman(int num) {
string res;
char* a[4][10]={
{“”,”I”,”II”,”III”,”IV”,”V”,”VI”,”VII”,”VIII”,”IX”},
{“”,”X”,”XX”,”XXX”,”XL”,”L”,”LX”,”LXX”,”LXXX”,”XC”},
{“”,”C”,”CC”,”CCC”,”CD”,”D”,”DC”,”DCC”,”DCCC”,”CM”},
{“”,”M”,”MM”,”MMM”}
};
res+=a[3][num/1000%10];
res+=a[2][num/100%10];
res+=a[1][num/10%10];
res+=a[0][num%10];
return res;
}
};
Tip:
if use:
res+=a[0][num%10];
res+=a[1][num/10%10];
res+=a[2][num/100%10];
res+=a[3][num/1000%10];
It will be much slower!