您的位置:首页 > 其它

LeetCode | #12 Integer to Roman

2015-01-16 22:20 417 查看
题目:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: