输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1 # -*- coding:utf-8 -*- 2 class Solution: 3 def NumberOf1(self, n): 4 count = 0 5 flag = 1 6 for i in range(32): 7 if n & flag: 8 count += 1 9 flag <<= 1 10 return count 11 # write code here
leetcode地址,Java版代码:
算法思路:使用 n&(n-1),该位运算去除 n 的位级表示中最低的那一位1。
1 public class Solution { 2 // you need to treat n as an unsigned value 3 public int hammingWeight(int n) { 4 int cnt = 0; 5 while (n != 0) { 6 cnt++; 7 n &= (n - 1); 8 } 9 return cnt; 10 } 11 }
另一个版本:
1 public class Solution { 2 // you need to treat n as an unsigned value 3 /* 4 * 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如, 把 9 表示成二进制是 1001,有 2 位是 5 * 1。因此,如果输入 9,则该函数输出 2。 6 */ 7 public int hammingWeight(int n) { 8 return Integer.valueOf(n).bitCount(n); 9 } 10 }