【JS算法】nodejs中leftpad实现

2022-05-03  本文已影响0人  wyc0859

解题思路:
二分法,把1个数,不断的分装到2个盒子,直到分为1时,结束(用while循环)
当盒子是奇数的时候,就拿个1放到答案圈里,就可以继续分

function leftpad(str, length, ch) {
  let len = length - str.length;
  total = ""; //答案圈
  while (true) {
    //判断是否奇数
    if (len % 2 == 1) { 
      total += ch;
    }
    if (len == 1) {
      return total + str;
    }
    //分成2个盒子,就是乘2
    ch += ch; //因为是字符串所以用 ch+=ch
    len = parseInt(len / 2); //除2后先上取整
  }
}
const res = leftpad("abcd", 24, "x");

1、判断是否奇数可以用位运算 (x&1) 代替
2、除2后先上取整可以用位运算 (x>>1) 代替

所以上面的函数可以改写为

function leftpad2(str, length, ch) {
  let len = length - str.length;
  total = ""; 
  while (true) { 
    //判断是否奇数
    //第一次:(20 & 1)= (10100 & 1) 结果为0
    if (len & 1) { 
      total += ch;
    }
    if (len == 1) {
      return total + str;
    }
    ch += ch;   
    len = len >> 1;  
  }
}
上一篇下一篇

猜你喜欢

热点阅读