LeetCode 12 整数转罗马数字

题目

1

代码实现:

方法一(暴力法,分类讨论):

class Solution {
    public String intToRoman(int num) {
        StringBuilder sb = new StringBuilder();
        
            if(num/1000 >=1){
                int a = num/1000;
                while(a>0){
                    sb.append("M");
                    a--;
                }
                num %= 1000;
            }
            if(num/500 >=1){
                if(num >=900){
                    sb.append("CM");
                    num -= 900;
                    
                }else{
                    sb.append("D");
                    num %= 500;
                }
            }
            if(num/100 >= 1){
                if(num >=400){
                    sb.append( "CD");
                    num -= 400;
                }else{
                    int b = num/100;
                    while(b>0){
                        sb.append("C");
                        b--;
                    }
                    num %= 100;
                }
            }
            if(num/50 >= 1){
                if(num>=90){
                    sb.append("XC");
                    num -= 90;
                }else{
                    int c = num/50;
                    while(c>0){
                        sb.append("L");
                        c--;
                    }
                    num %= 50;
                }
            }
            if(num/10>=1){
                if(num>=40){
                    sb.append("XL");
                    num-=40;
                }else{
                    int d = num/10;
                    while(d>0){
                        sb.append("X");
                        d--;
                    }
                    num %= 10;
                }
            }
            if(num/5 == 1){
                if(num == 9){
                    sb.append("IX");
                    num -= 9;
                }else{
                    sb.append("V");
                    num %= 5;
                }
            }
            if(num == 4){
                sb.append("IV");
                num -= 4;
            }
            if(num < 4){
                int e = num;
                while(e>0){
                    sb.append("I");
                    e--;
                }
                num = 0;
            }
        return sb.toString();
    }
}

1


方法二(数组法):

class Solution {
    public String intToRoman(int num) {
        int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String[] key = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int addr = 0;
        StringBuilder sb = new StringBuilder();
        while(num>0){
            if(num>=values[addr]){
                sb.append(key[addr]);
                num -= values[addr];
            }else{
                addr++;
            }
        }
        return sb.toString();
    }
}

1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值