题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
思路:- 用二维数组记录每一位上0-9的罗马数字表示法,代替0-9
public String intToRoman(int num) {
//穷举,用二维数组保存所有位的字母表示
String[][] c = new String[][]{
{"","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"}};
int i=0, j;
String s = new String();
while(num > 0){
j = num%10;
s = c[i][j]+s;
num = num/10;
i++;
}
return s;
}
- 网上看到别人的解法,更加简洁,记录特殊进位的罗马字符,然后从最大的进位做减法
public String intToRoman(int num) {
String[] c = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int[] v = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String s = new String();
for(int i = 0; i< v.length; i++){
while(num >= v[i]){
num = num-v[i];
s = s+c[i];
}
}
return s;
}