【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;
}
}