LeetCode第十二题(整数转罗马数字)

177 阅读1分钟

暴力匹配(Java)

核心思想: 太暴力了

class Solution {
    public String intToRoman(int num) {
        String[] thousands = {"","M","MM","MMM"};//千位可能对应的罗马字符
        String[] hundreds = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};//百位可能对应的罗马字符
        String[] tens = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};//十位可能对应的罗马字符
        String[] ones = {"","I","II","III","IV","V","VI","VII","VIII","IX"};//个位可能对应的罗马字符
        StringBuilder sb = new StringBuilder();
        sb.append(thousands[num / 1000 % 10]);//千位
        sb.append(hundreds[num / 100 % 10]);//百位
        sb.append(tens[num / 10 % 10]);//十位
        sb.append(ones[num % 10]);//个位
        return sb.toString();
    }
}

枚举匹配(Java)

核心思想: 枚举可能的罗马字符及其对应的整数(不超过num的最大整数),通过待转整数num依次和不超过num的最大整数相减得到对应的罗马字符,最后通过StringBuilder对象拼接。

class Solution {
    public String intToRoman(int num) {
        String[] romans = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};//枚举可能的罗马字符
        int[] digits = {1000,900,500,400,100,90,50,40,10,9,5,4,1};//枚举可能的罗马字符对应的整数
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < romans.length; i++){
            //循环拼接不超过num的最大整数对应的罗马字符
            while(num >= digits[i]){
                sb.append(romans[i]);
                num -= digit[i];
            }   
        }
        return sb.toString();
    }
}