LeetCode 经典 150 · 可视化
逐步动画、变量流转与五语言代码参考
#12 · 数组 / 字符串
整数转罗马数字
Integer to Roman
num = 1994静态推导静态讲解
从大到小贪心扣减
- 取最大可用值 1000,写入 M。remaining=994
- 取 900,写入 CM。remaining=94
- 取 90,写入 XC。remaining=4
- 取 4,写入 IV。return MCMXCIV
推荐
从大到小贪心扣减
时间
O(1)空间 O(1)把普通值与减法组合都列出,每次取不超过剩余数字的最大值。
1function intToRoman(num) {2 const pairs = [3 [1000, "M"],4 [900, "CM"],5 [500, "D"],6 [400, "CD"],7 [100, "C"],8 [90, "XC"],9 [50, "L"],10 [40, "XL"],11 [10, "X"],12 [9, "IX"],13 [5, "V"],14 [4, "IV"],15 [1, "I"]16 ];17 let result = "";18 for (const [value, symbol] of pairs)19 while (num >= value) {20 result += symbol;21 num -= value;22 }23 return result;24}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public String intToRoman(int num) {3 List<String> cs4 = List.of("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I");5 List<Integer> vs = List.of(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1);6 StringBuilder ans = new StringBuilder();7 for (int i = 0, n = cs.size(); i < n; ++i) {8 while (num >= vs.get(i)) {9 num -= vs.get(i);10 ans.append(cs.get(i));11 }12 }13 return ans.toString();14 }15}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。