拓冰建站拓冰建站
首页 / 资讯中心 / 正文

千问 LeetCode 12.整数转罗马数字 JavaScript实现

LeetCode 12. 整数转罗马数字的核心思路是贪心算法从大到小依次匹配罗马数字符号每次尽可能多地使用当前最大的符号。核心思路1. 将所有可能的罗马数字符号包括 4、9、40、90 等特殊组合按值从大到小排列2. 遍历符号表只要当前数值 ≥ 符号对应的值就将其拼入结果并减去对应值3. 直到数值归零JavaScript 完整实现解法一贪心 符号表推荐/*** param {number} num* return {string}*/var intToRoman function(num) {const symbols [[M, 1000], [CM, 900], [D, 500], [CD, 400],[C, 100], [XC, 90], [L, 50], [XL, 40],[X, 10], [IX, 9], [V, 5], [IV, 4],[I, 1],];let result ;for (const [symbol, value] of symbols) {while (num value) {result symbol;num - value;}}return result;};解法二贪心 repeat更简洁var intToRoman function(num) {const symbols [[M, 1000], [CM, 900], [D, 500], [CD, 400],[C, 100], [XC, 90], [L, 50], [XL, 40],[X, 10], [IX, 9], [V, 5], [IV, 4],[I, 1],];return symbols.reduce((acc, [symbol, value]) {acc symbol.repeat(Math.floor(num / value));num % value;return acc;}, );};解法三按位打表查表法var intToRoman function(num) {const thousands [, M, MM, MMM];const hundreds [, C, CC, CCC, CD, D, DC, DCC, DCCC, CM];const tens [, X, XX, XXX, XL, L, LX, LXX, LXXX, XC];const ones [, I, II, III, IV, V, VI, VII, VIII, IX];return thousands[Math.floor(num / 1000)] hundreds[Math.floor((num % 1000) / 100)] tens[Math.floor((num % 100) / 10)] ones[num % 10];};三种解法对比项目 贪心法while 贪心法repeat 打表法时间复杂度 O(1) O(1) O(1)空间复杂度 O(1) O(1) O(1)可读性 ⭐⭐⭐ 逻辑清晰 ⭐⭐⭐ 最简洁 ⭐⭐⭐ 直观但表长扩展性 好改符号表即可 好 一般需增加新表关键细节- 特殊组合要提前放入符号表把 CM(900)、CD(400)、XC(90)、XL(40)、IX(9)、IV(4) 作为独立单元加入贪心匹配时自然能正确处理减法规则无需额外判断- repeat 搭配 Math.floorMath.floor(num / value) 计算当前符号最多能用几次num % value 取余后继续处理剩余值- 题目保证 1 ≤ num ≤ 3999无需处理越界情况千位最多 3 个 M打表法中 thousands 数组只需 4 个元素三种解法都是 O(1) 复杂度面试中贪心法while 版最好讲思路repeat 版最简洁打表法则胜在纯查表无循环。反过来罗马数字转整数LeetCode 13要不要也用 JavaScript 写一遍
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门