您的位置:首页 > 编程语言 > Java开发

LeetCode 12 整数转罗马数字 java

2019-08-03 16:59 405 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_36331193/article/details/98351411

方法一
用一个大While循环通过各种if-else语句依次减少num的值构造str,虽然时间代价不大但是代码冗长:

class Solution {
public String intToRoman(int num) {
String str = "";
while(num>0){
if(num>=1000){
num-=1000;
str+='M';
}
else if(num >= 900&&num<1000){
num-=900;
str+="CM";
}
else if(num>=500&&num<900){
num-=500;
str+="D";
}
else if(num>=400&&num<500){
num-=400;
str+="CD";
}
else if(num>=100&&num<400){
num-=100;
str+="C";
}
else if(num>=90&&num<100){
num-=90;
str+="XC";
}
else if(num>=50&&num<90){
num-=50;
str+="L";
}
else if(num>=40&&num<50){
num-=40;
str+="XL";
}
else if(num>=10&&num<40){
num-=10;
str+="X";
}
else if(num>=9&&num<10){
num-=9;
str+="IX";
}
else if(num>=5&&num<9){
num-=5;
str+="V";
}
else if(num==4){
num-=4;
str+="IV";
}
else{
num-=1;
str+="I";
}
}
return str;
}
}

可以通过将各种不同大小的数字与对应的罗马字母依次存到两个数组里,用查表的方式遍历数组,可精简代码量:

class Solution {
public String intToRoman(int num) {
int values[]=new int[]{1000,900,500,400,100,90,50,40,10,9,5,4,1};
String strs[]=new String[]{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};

String str="";
for(int i=0; i<13; i++){
if(num==0)
break;
int times=num/values[i];
if(times==0)
continue;
for(int t=0;t<times;t++)
{
str+=strs[i];
}
num=num-(times*values[i]);
}
return str;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: