LeetCode?启动!!!
今天状态调整正式结束,寒假学习正式开始。
题目:计算 K 置位下标对应元素的和
题目描述
代码与解题思路
位运算
func sumIndicesWithKSetBits(nums []int, k int) (ans int) {
for i, v := range nums {
if getCnt(i) == k {
ans += v
}
}
return ans
}
func getCnt(i int) int {
cnt := 0
for i > 0 {
if i & 1 == 1 {
cnt++
}
i >>= 1
}
return cnt
}
我们根据题目的要求,去求出数组每个小标位置的 “置位”,当该下标的置位 == k,证明符合题目要求,就将他们的和加到一起
库函数
func sumIndicesWithKSetBits(nums []int, k int) (ans int) {
for i, v := range nums {
if bits.OnesCount(uint(i)) == k {
ans += v
}
}
return ans
}
在 go 语言,使用 bits.OnesCount(),传一个 uint 类型的数进去,能够算出他的置位是多少,不过我这里还是推荐把位运算的方法学会,位运算的方法也很好理解,更容易记忆