方法一 枚举法:
通过不断地将目标数值与 1 进行按位与操作,并根据结果判断最低位是否为 1,从而统计其中包含的 1 的个数。 如果1的个数等于K就加上该值。
var sumIndicesWithKSetBits = function(nums, k) {function countOnes(num) {let count = 0; // 初始化为零while (num !== 0) {if ((num & 1) === 1) { // 判断最低位是否为 1count++; // 若为 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;
};
消耗时间和内存情况: