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