今天发现一个问题,人家是leetcode被我一直写成了leedcode。。。以后的文章改成正确的。
下面说这一题,罗马数字需要在网上查一下,我用的方法是把每位数字存起来,然后把每一位转化成罗马数字的字符串然后连接起来即可,一开始没注意题目,用了队列因为可变长度,后来发现范围是1-3999,其实可以把队列改为长度为4的数组即可。
public String intToRoman(int num) {
Queue<Integer> q = new LinkedList<Integer>();
int ji=1;
while(num!=0){
int n = (int)(num%Math.pow(10,ji));
num=num-n;
n=(int)(n/Math.pow(10,ji-1));
q.offer(n);
ji++;
}
int we=1;
String s="";
while(!q.isEmpty()){
if(we==1){
int a=q.poll();
if(a==1) s="I";
else if(a==2) s="II";
else if(a==3) s="III";
else if(a==4) s="IV";
else if(a==5) s="V";
else if(a==6) s="VI";
else if(a==7) s="VII";
else if(a==8) s="VIII";
else if(a==9) s="IX";
}
if(we==2){
int a=q.poll();
if(a==1) s="X"+s;
else if(a==2) s="XX"+s;
else if(a==3) s="XXX"+s;
else if(a==4) s="XL"+s;
else if(a==5) s="L"+s;
else if(a==6) s="LX"+s;
else if(a==7) s="LXX"+s;
else if(a==8) s="LXXX"+s;
else if(a==9) s="XC"+s;
}
if(we==3){
int a=q.poll();
if(a==1) s="C"+s;
else if(a==2) s="CC"+s;
else if(a==3) s="CCC"+s;
else if(a==4) s="CD"+s;
else if(a==5) s="D"+s;
else if(a==6) s="DC"+s;
else if(a==7) s="DCC"+s;
else if(a==8) s="DCCC"+s;
else if(a==9) s="CM"+s;
}
if(we==4){
int a=q.poll();
if(a==1) s="M"+s;
else if(a==2) s="MM"+s;
else s="MMM"+s;
}
we++;
}
return s;
}