一. 题目
-
题目
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 -
示例
二. 方法一
-
解题思路
-
Python代码
def hammingWeight(self, n: int) -> int: count = 0 while n > 0: if n % 2 == 1: count += 1 n >>= 1 return count
-
Java代码
public int hammingWeight(int n) { // 方法一: int count = 0; for(int i = 0; i < 32; i++) { // 统计最后一位是否为0 if((n & 1) == 1){ count += 1; } n = n >> 1; } return count; }
-
分析
时间复杂度: O(1)
空间复杂度: O(1)
三. 方法二: 使用Python中的函数
-
解题思路
-
解题代码
def hammingWeight(self, n: int) -> int: str1 = bin(n) return str1.count('1')
-
分析
时间复杂度: O(1)
空间复杂度: O(1)
四. 方法三: n & (n - 1)
-
解题思路
-
解题代码
public int hammingWeight(int n) { // 方法二: int count = 0; while(n != 0){ // n & (n - 1) 会将n的最后一位1置为0 // 即: 每执行一次, 就会减少一位"1" n &= (n - 1); count += 1; } return count; }
-
分析
时间复杂度: O(1)
空间复杂度: O(1)