比特位计数
按位与
function countBits(n: number): number[] {
const bits = Array(n + 1).fill(0)
const countOnes = (x: number): number => {
let counts = 0
while (x > 0) {
x &= x - 1
counts++
}
return counts
}
for (let i = 1; i <= n; i++) {
bits[i] = countOnes(i)
}
return bits
}
奇偶数
奇数:二进制中,奇数一定比前面的偶数多一个 1。 偶数:二进制中,偶数最低位是 0,向右位移一位,1 个数不变。
function countBits(n: number): number[] {
const bits = Array(n + 1).fill(0)
for (let i = 1; i <= n; i++) {
if (i % 2 === 1) {
bits[i] = bits[i - 1] + 1
} else {
bits[i] = bits[i >> 1]
}
}
return bits
}