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(); }