12.2 LeetCode 转罗马数字 动点脑子

半枚举法

    public static String intToRoman1(int num) {
        // 数字枚举  只列举特殊的
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        // 对应罗马字符 对应特殊数字
        String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        StringBuffer roman = new StringBuffer();
        for (int i = 0; i < values.length; i++) {
            // 9000 -1000 如果减去一千  小于一千就说明剩余部分不足一千 不可能减去两次五百两次四百两次九百
            // 因为先减900 后减500 唯一可能重复的只有一百  就是尾端
            while (num>=values[i]){
                // 此消彼长
                num -= values[i];
                roman.append(symbols[i]);
            }

        }
        return roman.toString();
    }

 

posted @ 2021-09-26 17:11  OTeam  阅读(29)  评论(0)    收藏  举报