面试10:二进制中1的个数
2018-06-20 本文已影响0人
fighting_css
【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
【思路】
一个数n,假设二进制个位上是1,则n-1后,个位上为0,其它位不变,如111-1变为110
假设n最右边m位为1,比如1100,右边第三位为1,n-1为1011,变化规律为m位变0,m位右边全为1,m位左边不变,故n与n-1按位与后,可留下m位左边的1。故为1的个数即为按位与不为0的次数。
注意边界条件:
【代码】
class Solution:
def NumberOf1(self, n):
INT_BITS = 32
MAX_INT = (1 << (INT_BITS - 1)) - 1
# write code here
count = 0
#进入循环,则n含有1
while (n!=0):
if n < - MAX_INT - 1 or n > MAX_INT + 1:
break
count+=1
n = n & (n-1) #按位与
return count