力扣刷题java,力扣刷题题库
终极管理员 知识笔记 71阅读
1.十进制整数的反码
方法一位运算
每个非负整数 N 都有其二进制表示。例如 5 可以被表示为二进制 10111 可以用二进制 1011 表示依此类推。注意除 N 0 外任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如二进制数 101 的二进制反码为 010。

给你一个十进制数 N请你返回其二进制表示的反码所对应的十进制整数。
方法一位运算#方法一位运算def bitwiseComplement(n): tem2 cn while c>1: c>>1 tem<<1 #找到最高二进制位1的位置 return n^(tem-1) #异或运算相同为0相异为1,全为1的数进行异或
2.将数字变成 0 的操作次数 给你一个非负整数 num 请你返回将它变成 0 所需要的步数。 如果当前数字是偶数你需要把它除以 2 否则减去 1 。

#方法一位运算def numberOfSteps(num): res0 while num: res(num&1)(num>1) #判断最右边是不是1和num是不是大于1,为1进行两步操作 num>>1 return res
3.根据数字二进制下 1 的数目排序 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同则必须将它们按照数值大小升序排列。
请你返回排序后的数组。
方法一排序位运算#方法一排序位运算def sortByBits(arr): def count1(n): res0 while n : resn&1 n>>1 return res #计算1的个数 return sorted(arr,keylambda x: (count1(x),x))
标签: