LC.P2859[计算K置位下标对应元素的和] 方法一:模拟(调包)1234567891011121314151617181920class Solution { public int sumIndicesWithKSetBits(List<Integer> nums, int k) { int ans = 0; for (int i = 0; i < nums.size(); ++i) { if (bicCount(i) == k) { ans += nums.get(i); } } return ans; } private int bicCount(int x) { int cnt = 0; while (x > 0) { x &= x - 1; ++cnt; } return cnt; }} 时间复杂度:$O(nlogn)$ 空间复杂度:$O(1)$ 方法二:位运算1234567891011121314151617181920class Solution { public int sumIndicesWithKSetBits(List<Integer> nums, int k) { int ans = 0; for (int i = 0; i < nums.size(); ++i) { if (bicCount(i) == k) { ans += nums.get(i); } } return ans; } private int bicCount(int x) { int cnt = 0; while (x > 0) { x &= x - 1; // 把最低位的 1 置为 0 ++cnt; } return cnt; }} 时间复杂度:$O(nlogn)$ 空间复杂度:$O(1)$