本文主要是介绍LeetCode.2859. 计算 K 置位下标对应元素的和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题目链接
分析
这道题的题意很明确。就是求每一个下标的二进制中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;}
}
这篇关于LeetCode.2859. 计算 K 置位下标对应元素的和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!