题目在这:https://leetcode-cn.com/problems/number-of-1-bits/
法一 :(一行代码法)
思路分析:
直接将给的数字变成二进制数,使用count()函数统计其中1的个数就行了。
完整代码:
法二: (右移法)
思路分析:
可以将所给数每次都和1进行 与 操作。操作完后将数字向右移一位。
移动后 前面补0,当整个数字都是0的时候,结束。
比如: 所给数字为 0101110001
该数字和1进行 与操作。则除了最后一位是1以外,其他都是0、所以 与 操作之后 得到1。然后后移继续比较所给数字的末尾数。
若给的数字最后一位是0.则 与 操作之后得到的也是0.
这样我们就可以统计出来所给数里面有多少个1了。
完整代码
法三 (n&(n-1)):
思路分析:
让所给数字和 该数字-1 进行与操作,即n&(n-1)
。
这个方法实际上和法二有些类似,只是不需移动数字,
每次都和自己-1 进行 与操作。
每进行一次 与操作 则记录 +1
比如 0101
和他减一进行 与操作 得到 0100
。 记录 +1
0100
再和他减一 进行 与操作 得到 0000
。 记录 +1
所以0101
里有两个1
完整代码: