力扣刷题 day54:10-24

1.十进制整数的反码

每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。

二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。

给你一个十进制数 N,请你返回其二进制表示的反码所对应的十进制整数。力扣刷题 day54:10-24_第1张图片

方法一:位运算 

#方法一:位运算
def bitwiseComplement(n):
    tem=2
    c=n
    while c>1:
        c>>=1
        tem<<=1  #找到最高二进制位1的位置
    return n^(tem-1)  #异或运算,相同为0,相异为1,全为1的数进行异或

2.将数字变成 0 的操作次数

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

力扣刷题 day54:10-24_第2张图片

方法一:位运算 

#方法一:位运算
def numberOfSteps(num):
    res=0
    while num:
        res+=(num&1)+(num>1) #判断最右边是不是1和num是不是大于1,为1进行两步操作
        num>>=1
    return res

3.根据数字二进制下 1 的数目排序 

给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。

如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。

请你返回排序后的数组。力扣刷题 day54:10-24_第3张图片

方法一:排序+位运算 

#方法一:排序+位运算
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)) 

你可能感兴趣的:(力扣刷题,1024程序员节)