问题描述:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析:这道题看上去很难,其实只是规矩多了一些。这道题首先将数字变成字符数组,然后对不同位上的数字进行处理,对于每个位,还要区分这个数是否小于4、等于4、小于9、等于9四种情况。
代码如下:364ms
public class Solution {
public String intToRoman(int num) {
String numstr = Integer.toString(num);
char[] nums = numstr.toCharArray();
StringBuilder builder = new StringBuilder();
int base;
int length = nums.length;
for(int i = 0;i<length;i++){//从左到右
int val = nums[i]-'0';
base = length-i;
switch (base) {
case 4://最大数小于3999
for (int j = 0;j<val;j++)
builder.append('M');
break;
case 3:
if(val>=1 && val<=3) {
for(int j = 0;j<val;j++)
builder.append('C');
}else if(val == 4){
builder.append("CD");
}else if(val>=5 && val<9){
builder.append('D');
for(int j = 5;j<val;j++)
builder.append('C');
}else if(val==9)//9
builder.append("CM");
break;
case 2:
if(val>=1 && val<=3){
for(int j = 0;j<val;j++)
builder.append('X');
}else if(val==4){
builder.append("XL");
}else if(val>=5 && val<9){
builder.append('L');
for(int j = 5;j<val;j++)
builder.append('X');
}else if(val==9)
builder.append("XC");
break;
case 1:
if(val>=1 && val<=3){
for(int j = 0;j<val;j++)
builder.append('I');
}else if(val==4)
builder.append("IV");
else if(val>=5 && val<9){
builder.append('V');
for(int j = 5;j<val;j++)
builder.append('I');
}else if(val==9)
builder.append("IX");
break;
}
}
return builder.toString();
}
}