当前位置: 代码迷 >> 综合 >> 【Leetcode 每日一题】1356. 根据数字二进制下 1 的数目排序(水题)
  详细解决方案

【Leetcode 每日一题】1356. 根据数字二进制下 1 的数目排序(水题)

热度:49   发布时间:2023-11-23 12:09:11.0

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