Skip to content

Latest commit

 

History

History
38 lines (29 loc) · 603 Bytes

15. 二进制中1的个数.md

File metadata and controls

38 lines (29 loc) · 603 Bytes

解题思路

1. 逐位判断

每次右移一位,判断当前位是否为 1

func hammingWeight(num uint32) int {
    ans := 0
    for i := 0; i < 32; i++ {
        if (num >> i)&1 == 1 {
            ans++
        }
    }
    return ans
}

2. 数 1

n-1 能让二进制数 n 最右边的 1 变成 0,此 1 后面的数全部变为 0

n & (n-1) 能让二进制数 n 最右边的 1 变成 0

func hammingWeight(num uint32) int {
    ans := 0
    for num != 0 {
        num = num & (num-1)
        ans++
    }
    return ans
}