DeepSeek LeetCode 12.整数转罗马数字 Java实现 📅 发布时间:2026/8/28 6:09:59 👁 浏览次数: LeetCode 12题“整数转罗马数字”的Java实现最经典且高效的方法是贪心算法。核心思路是预先定义13个特殊的罗马数字符号包含4、9等特殊组合然后从大到小依次从原数中减去符号对应的值并拼接符号。方法一贪心算法数组实现这是最推荐的实现方式代码简洁且直观javaclass Solution {public String intToRoman(int num) {// 数值从大到小排列包含所有单字符和6个特殊组合[reference:3]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};StringBuilder roman new StringBuilder();for (int i 0; i values.length; i) {// 当前符号能用几次就用几次[reference:4][reference:5]while (num values[i]) {num - values[i];roman.append(symbols[i]);}}return roman.toString();}}方法二硬编码查表法利用罗马数字的规则千、百、十、个位各自独立通过预定义的表直接拼接时间复杂度也是O(1)javaclass 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};return thousands[num / 1000] hundreds[(num % 1000) / 100] tens[(num % 100) / 10] ones[num % 10];}}复杂度分析两种方法的时间复杂度和空间复杂度均为 O(1)。因为符号数量固定13个循环次数是常数不随输入数字大小变化。 要点提示拼接字符串时务必使用 StringBuilder 而非 String以提升性能题目约束 1 num 3999因此代码无需处理超出范围的输入。