题目
题目链接
分析
这道题的题意很明确。就是求每一个下标的二进制中1的个数为k的下标所对应的元素值之和。
Java 中有 库函数 Integer.bitCount(num)
,这个函数的返回值就是 num 中 1 的个数。
代码
class Solution {public int sumIndicesWithKSetBits(List<Integer> nums, int k) {int ans = 0;for(int i = 0;i < nums.size();i ++) {if(Integer.bitCount(i) == k) {ans += nums.get(i);}}return ans;}
}
扩展
万一人家不让用库函数怎么办呢?????
那我们就需要老老实实自己写函数了。
我们首先考虑,怎么求得一个数字num 包含 1 的个数。
我们都知道 1 & 任何数 都得任何数。
那么我们就可以让 1&这个数的每一位 如果等于1就代表最后一位是1,然后右移这个数字,判断num二进制数的倒数第二位是否是1,依次判断,直到这个数字被移动为 0 为止。
下面看一下这段的代码:
int find(int num) {int count = 0;while(num != 0) {if((num & 1) == 1) count++;num >>= 1;}return count;}
根据上面的函数find我们就知道了一个数字二进制中 1 的个数了,接下来就可以解决 leetCode上面的题目了:
class Solution {public int sumIndicesWithKSetBits(List<Integer> nums, int k) {int ans = 0;for(int i = 0;i < nums.size();i ++) {if(find(i) == k) {ans += nums.get(i);}}return ans;}int find(int num) {int count = 0;while(num != 0) {if((num & 1) == 1) count++;num >>= 1;}return count;}
}