ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【LeetCode】12.整数转罗马数字

【LeetCode】12.整数转罗马数字 欢迎来到李耶的频道【LeetCode面试题】。整数转罗马数字 LeetCode 原题链接题目罗马数字包含以下七种字符IVXLCD和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如罗马数字 2 写做II即为两个并列的 1。12 写做XII即为XII。27 写做XXVII即为XXVII。通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做IIII而是IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4。同样地数字 9 表示为IX。这个特殊的规则只适用于以下六种情况I可以放在V(5) 和X(10) 的左边来表示 4 和 9。X可以放在L(50) 和C(100) 的左边来表示 40 和 90。C可以放在D(500) 和M(1000) 的左边来表示 400 和 900。给你一个整数将其转为罗马数字。输入num 3 输出III 输入num 4 输出IV 输入num 9 输出IX 输入num 58 输出LVIII 解释L 50, V 5, III 3 输入num 1994 输出MCMXCIV 解释M 1000, CM 900, XC 90, IV 4解法一贪心法符号表思路建立数值和罗马数字的对应表从大到小遍历数值每次尽可能多地使用当前最大数值对应的符号贪心地构建罗马数字。functionintToRoman(num){constvalues[1000,900,500,400,100,90,50,40,10,9,5,4,1];constsymbols[M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I];letresult;for(leti0;ivalues.length;i){while(numvalues[i]){resultsymbols[i];num-values[i];}}returnresult;}时间复杂度 / 空间复杂度O(1) / O(1)数值有限循环次数固定优势实现简单贪心策略正确是面试中最推荐的写法解法二硬编码数字思路将数字按位拆分千位、百位、十位、个位每一位用对应的罗马数字表示然后拼接成最终结果。functionintToRoman(num){constthousands[,M,MM,MMM];consthundreds[,C,CC,CCC,CD,D,DC,DCC,DCCC,CM];consttens[,X,XX,XXX,XL,L,LX,LXX,LXXX,XC];constones[,I,II,III,IV,V,VI,VII,VIII,IX];returnthousands[Math.floor(num/1000)]hundreds[Math.floor((num%1000)/100)]tens[Math.floor((num%100)/10)]ones[num%10];}时间复杂度 / 空间复杂度O(1) / O(1)优势代码简洁直接按位查找无需循环劣势硬编码数组较多但可读性尚可解法对比解法时间 / 空间复杂度优势推荐指数贪心法符号表O(1) / O(1)实现简单易于扩展⭐⭐⭐⭐⭐硬编码数字O(1) / O(1)按位处理直观高效⭐⭐⭐⭐扩展题罗马数字转整数给定一个罗马数字将其转换为整数。整数转英文表示将非负整数转换为其对应的英文表示。数字的十六进制表示将整数转换为十六进制字符串处理负数使用补码表示。“物有本末事有终始。” —— 《礼记·大学》关注李耶每天一道面试题一起卷起来
返回列表