剑指offer15题
由于除法效率比移位运算慢得多,所以本文使用移位运算符>>代替除以2的操作。
一、整数与1做与运算,每次右移
二、整数与flag做与运算,flag每次左移
三、整数与(整数-1)做与运算,直至与运算结果为0
一、该方法可以很好的处理正数,但在处理负数时,右移操作之后需要将首位置一,这样会导致最后生成0xFFFFFFFF,陷入死循环,所以推荐方法2
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
for i in range(32):
count += (n >> i) & 1
return count
二、
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
flag = 1
for _ in range(32):
count += n & flag
flag = flag << 1
return count
三、每次做一次n&(n-1),n的二进制表示中的最后一位的1都会变成0
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
for _ in range(32):
n = n & (n-1)
if n:
count += 1
return count
本文来自程序媛驿站,未经授权不得转载.
如有需要请公众号后台联系
(欢迎转发到朋友圈~)