每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。
给你一个十进制数 N,请你返回其二进制表示的反码所对应的十进制整数。
- #方法一:位运算
- def bitwiseComplement(n):
- tem=2
- c=n
- while c>1:
- c>>=1
- tem<<=1 #找到最高二进制位1的位置
- return n^(tem-1) #异或运算,相同为0,相异为1,全为1的数进行异或
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
- #方法一:位运算
- def numberOfSteps(num):
- res=0
- while num:
- res+=(num&1)+(num>1) #判断最右边是不是1和num是不是大于1,为1进行两步操作
- num>>=1
- return res
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。
请你返回排序后的数组。
- #方法一:排序+位运算
- def sortByBits(arr):
- def count1(n):
- res=0
- while n :
- res+=n&1
- n>>=1
- return res #计算1的个数
- return sorted(arr,key=lambda x: (count1(x),x))