方法一 枚举法:
通过不断地将目标数值与 1 进行按位与操作,并根据结果判断最低位是否为 1,从而统计其中包含的 1 的个数。 如果1的个数等于K就加上该值。
var sumIndicesWithKSetBits = function(nums, k) {
function countOnes(num) {
let count = 0; // 初始化为零
while (num !== 0) {
if ((num & 1) === 1) { // 判断最低位是否为 1
count++; // 若为 1,则计数加一
}
num >>= 1; // 右移一位,相当于除以2
}
return count;
}
let res = 0;
for (let i = 0; i < nums.length; ++i) {
if (countOnes(i) == k) {
res += nums[i];
}
}
return res;
};
消耗时间和内存情况:
方法二:对计算置位个数进行优化
具体步骤思路参考官方题解
作者:力扣官方题解
链接:leetcode.2859官方题解
var sumIndicesWithKSetBits = function(nums, k) {
const bitCount = (x) => {
x = (x & 0b0101010101) + ((x & 0b1010101010) >> 1);
x = ((x & 0b0011001100) >> 2) + (x & 0b1100110011);
x = (x >> 8) + ((x >> 4) & 0b1111) + (x & 0b1111);
return x;
}
let ans = 0;
for (let i = 0; i < nums.length; ++i) {
if (bitCount(i) == k) {
ans += nums[i];
}
}
return ans;
};
消耗时间和内存情况: