我的js算法爬坑之旅-整数转罗马数字

119 阅读1分钟

第二十四天:力扣第12题,整数转罗马数字

地址:leetcode-cn.com/problems/in…

思路:我这个思路可以称之为傻瓜式贪心算法,看了就懂了。

var intToRoman = function(num) {
  let thousand = ['','M','MM','MMM'];
  let hundred = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
  let ten = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
  let one = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
  return thousand[Math.floor(num/1000)]+hundred[Math.floor(num%1000/100)]+ten[Math.floor(num%1000%100/10)]+one[Math.floor(num%1000%100%10)];
};

感觉好傻,但是确实猛。

执行用时:152 ms, 在所有 JavaScript 提交中击败了91.75%的用户
内存消耗:44 MB, 在所有 JavaScript 提交中击败了21.94%的用户

找了找其他大佬代码,有一个还不错:

var intToRoman = function(num) {
    let nums=[1000,900,500,400,100,90,50,40,10,9,5,4,1],
        chars=['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'];
    let result='';
    while(num){
        if(num>=nums[0]){
            result+=chars[0];
            num-=nums[0];
        }else{
            nums.shift();
            chars.shift();
        }
    }
    return result;
};  

这个只与第一项对比相加挺不错的。