//罗马数字不是很懂,结果糊涂到 49 999 都用两个罗马数字表示 结果错了 因为 每个罗马数字最多用三次 class Solution {//本题的思路很简单 就是一直循环到满足下一个循环条件 public String intToRoman(int num) {//解法容易 写法啰嗦 然后我看了其他人的写法 自己也分析了以下 String result = ""; while (num >= 1000) { result += "M"; num -= 1000; } while (num >= 900) { result += "CM"; num -= 900; } while (num >= 500) { result += "D"; num -= 500; } while (num >= 400) { result += "CD"; num -= 400; } while (num >= 100) { result += "C"; num -= 100; } while (num >= 90) { result += "XC"; num -= 90; } while (num >= 90) { result += "XC"; num -= 90; } while (num >= 50) { result += "L"; num -= 50; } while (num >= 40) { result += "XL"; num -= 40; } while (num >= 10) { result += "X"; num -= 10; } while (num >= 9) { result += "IX"; num -= 9; } while (num >= 5) { result += "V"; num -= 5; } while (num >= 4) { result += "IV"; num -= 4; } while (num >= 1) { result += "I"; num -= 1; } return result; } }
别的大佬的做法 我也分析了以下 加了旁注
//两道题思路差不多 class Solution { private String[] symbols = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};//创建一个数组 保存各种形式的两个罗马数组合以及单个 private int[] values = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, Integer.MAX_VALUE};//跟上面一一对应 最后加上了一个int最大值 public String intToRoman(int num) { StringBuilder builder = new StringBuilder();//创建一个可变的字符串 因为性能的原因 不用 str+str2的 方法 我也转载了一篇StringBuilder()的介绍 int input = num; while(input > 0){//循环条件输入不为0 int index = getNearestIndex(input);//索引 index builder.append(symbols[index]); input -= values[index];//减去已经加进去字符串种所对应的值 } return builder.toString();//返回整个字符串 } public int getNearestIndex(int num){ int index = 0; while(index < values.length){//一个一个索引 if(values[index] < num){//value[]是从小到大排序 index++; } else if(values[index] > num){ return index - 1; } else { break;//找到了跳出来 } } return index; } }