给你一个下标从 0 开始的整数数组
nums
和一个整数k
。请你用整数形式返回
nums
中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在k
个置位。整数的二进制表示中的 1 就是这个整数的 置位 。
例如,
21
的二进制表示为10101
,其中有3
个置位。
示例一:
输入:nums = [5,10,1,5,2], k = 1 输出:13 解释:下标的二进制表示是: 0 = 0002 1 = 0012 2 = 0102 3 = 0112 4 = 1002 下标 1、2 和 4 在其二进制表示中都存在 k = 1 个置位。 因此,答案为 nums[1] + nums[2] + nums[4] = 13 。
代码:额...,这题我就不写题解了。
int bitCount(int x);
class Solution {
public:
int sumIndicesWithKSetBits(vector<int>& nums, int k) {
int ans = 0;
for(int i=0; i<nums.size();++i)
{
if(bitCount(i) == k)
{
ans += nums[i];
}
}
return ans;
}
};
int bitCount(int x)
{
int cnt = 0;
while(x)
{
cnt +=(x%2);
x /= 2;
}
return cnt;
};