mycode 不会。。。
输入是二进制。。。。我还以为十进制。。。。 00000001011 = 11
题意:
编写一个将(无符号)整数作为输入的函数,并返回该数字二进制表示中等于1的位数。
例如:输入1234,其二进制表示为10011010010,所以所要求实现函数的输出应该是5。
参考
1 移位+计数
class Solution(object): def hammingWeight(self, n): """ :type n: int :rtype: int """ count = 0 while n > 0 : if(n&1) == 1: count = count+1 n>>=1 return count
2、
思路:用n&(n-1)来消去一个1 能循环多少次就是能消多少个1~
因为如果那个位置本身就是1的话,那么减去一除了最后一位会变以外,其他都不会变 1111-1=1110;如果最后一位是0;则最右的1变为0,它右边的全部都取反一次,左边不变,然后与原本自己作与能恢复,变回只变换了一位的数据。如1000-1=0111 0111&1000=0000 实际上只把其中最右的1变为0而已;所以他能循环多少次就有多少个1.
如x=0001101011000
x- 1 = 0001101010111 那么&之后,x右边第一个1的位置变为0,右边的0还是0,所以还是相当count一个1
class Solution: def NumberOf1(self, n): if n<0: n = n & 0xffffffff cnt = 0 while n: n = n&(n-1) cnt += 1 return cnt
def isPowerOfTwo(n): if n&(n-1): return False return True class Solution(object): def hammingWeight(self, n): """ :type n: int :rtype: int """ if n==0: return 0 elif n<=2: return 1 if isPowerOfTwo(n): #说明二进制数有且仅有一个1啦,所以消去了一个1后,if为False return 1 else : c=0 for i in range(32): c+=n%2 #感觉就是看最低位是不是1 n=n>>1 return c
3
bin(n) 是python的一个系统函数,能够将n 转换为 0b110001 的二进制形式
replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
len() 再获取其长度,就是该数字二进制表示中等于1的位数
虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。
replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
len() 再获取其长度,就是该数字二进制表示中等于1的位数
虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。
def hammingWeight(self, n): """ :type n: int :rtype: int """ return str(bin(n).replace("0b","")).count("1")
或者
return bin(n).count("1")
return len(bin(n).replace("0b","").replace("0",""))
bin(n) 是python的一个系统函数,能够将n 转换为 0b110001 的二进制形式
replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
len() 再获取其长度,就是该数字二进制表示中等于1的位数
虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。
replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
len() 再获取其长度,就是该数字二进制表示中等于1的位数
虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。
作者:曹波波
链接:https://www.jianshu.com/p/e642d225bb59
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。