The idea is to loop by dividing the target number. Notice that 4 and 9 cases, which are different from regular cases. And if processed as 9, the next number is also different, which skip 5 cases.
Just be careful and calmed. Resolve it level by level until reach target to be 0 as target % 1.
public class Solution {
public String intToRoman(int num) {
if(!(num >= 1 || num < 4000)){
return null;
}
StringBuilder res = new StringBuilder();
while(num > 0){
if(num >= 1000){
int dividing = num / 1000;
num = num % 1000;
for(int i = 0; i < dividing; i++){
res.append("M");
}
}else if(num >= 500){
if(num >= 900){
res.append("CM");
num = num % 100;
}else{
res.append("D");
num = num % 500;
}
}else if(num >= 100){
if(num >= 400){
res.append("CD");
}else{
int dividing = num / 100;
for(int i = 0; i < dividing; i++){
res.append("C");
}
}
num = num % 100;
}else if(num >= 50){
if(num >= 90){
res.append("XC");
num = num % 10;
}else{
res.append("L");
num = num % 50;
}
}else if(num >= 10){
if(num >= 40){
res.append("XL");
}else{
int dividing = num / 10;
for(int i = 0; i < dividing; i++){
res.append("X");
}
}
num = num % 10;
}else if(num >= 5){
if(num == 9){
res.append("IX");
num = num % 1;
}else{
res.append("V");
num = num % 5;
}
}else if(num > 0){
if(num == 4){
res.append("IV");
}else{
for(int i = 0; i < num; i++){
res.append("I");
}
}
num = num % 1;
}
}
return res.toString();
}
}
没有评论:
发表评论