一、题目
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
点击查看原题
难度级别: 简单
二、 思路
1)按位运算
由于给定的是32位int型数据,需要计算二进制位中所有1的个数,可以去位移并判断每一位是否为1,进行计数
2)数学方法
采用n &= n-1的方式消去n中存在的1,原理(举例)如下:
n = 0000 0000 0000 1100n-1 = 0000 0000 0000 1011n & (n-1) = ``0000 0000 0000 1000
三、代码
1)按位运算
public class Solution {public int hammingWeight(int n) {int ans = 0;while (n != 0) {if ((n & 1) == 1) {ans++;}n = n >>> 1;}return ans;}}
2)数学方法
public class Solution {public int hammingWeight(int n) {int ans = 0;while (n != 0) {n &= n-1;ans++;}return ans;}}
n为32,时间复杂度为O(logn),空间复杂度为O(1)
