# -*- coding:utf-8 -*- ''' 面试10:二进制中1的个数 思路1: 将1循环左移分别与n进行按位与运算,可得n每一位的1的个数 运算次数: 为n二进制下的位数 思路2: 将n减1,再与n进行与预算,这样会把该整数最右边的一个1变0,也就是消去了一个1 这样的话,有多少个1就进行多少次操作,自然也就得出二进制下1的个数了。 运算次数即为: 为1的个数 ''' class Solution: # 需要循环len(bin(n))次 def NumberOf1(self, n): # write code here count = 0 flag = 1 nLength = len(bin(n)) for i in range(nLength): if n & flag: count += 1 flag = flag << 1 return count def NumberOf2(self, n): count = 0 while n: count += 1 n = n&(n-1) return count if __name__ == '__main__': a = Solution() print a.NumberOf1(15) print a.NumberOf2(15)
剑指offer 之 二进制中1的个数
最新推荐文章于 2020-07-15 12:15:34 发布