【发布时间】:2021-06-11 20:20:40
【问题描述】:
两个参数
- 字符串长度
- 设置的位数
示例输入:5、2
输出:[“00011”、“00101”、“00110”、“01001”、“01010”、“01100”、“10001”、“10010”、“10100”、“11000”]
示例输入:7、3
输出:[“0000111”、“0001011”、“0001101”、“0001110”、“0010011”、“0010101”、“0010110”、“0011001”、“0011010”、“0011100”、“0100011”、 “0100101”、“0100110”、“0101001”、“0101010”、“0101100”、“0110001”、“0110010”、“0110100”、“0111000”、“1000011”、“1000101”、“1000110”、“10010” ”、“1001010”、“1001100”、“1010001”、“1010010”、“1010100”、“1011000”、“1100001”、“1100010”、“1100100”、“1101000”、“1110000”]
我创建的 Eager 算法从长度超过 20 开始变得非常低效
const getBinaries = (length, numberOfBitsSet) => {
const ones = new Array(length).fill(1).join('');
const max = parseInt(ones, 2) + 1;
const binaries = [];
for (let i = 1; i < max; i++) {
let bin = parseInt(i).toString(2);
const match = bin.match(/1/g);
if (!match || match.length !== numberOfBitsSet) {
continue;
}
const strLen = bin.split('').length;
const zeros = new Array(length - strLen).fill(0).join('');
bin = `${zeros}${bin}`;
binaries.push(bin);
}
return binaries;
};
【问题讨论】:
标签: javascript bitwise-operators bit bit-shift