Leetcode 每日一题
题目链接: 1356. 根据数字二进制下 1 的数目排序
难度: 简单
解题思路: 先求出每个元素对应的1的数目,然后再进行排序。
题解:
import functools as ft
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
# 用它对每个元素进行位运算若大于0则当前位为1
bit_set = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]
# 自定义比较函数
def tcmp(a, b):
if a[1] == b[1]:
return 1 if a[0] > b[0] else -1
else:
return 1 if a[1] > b[1] else -1
tlist = []
for sub_digit in arr:
cnt = 0
for base in bit_set:
cnt += 1 if (base & sub_digit ) > 0 else 0
tlist.append([sub_digit, cnt])
# 排序
tlist.sort(key=ft.cmp_to_key(tcmp)) #导入自己定义的cmp
# print(tlist)
res = [example[0] for example in tlist]
return res