class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
if not arr:
return []
#定义一个字典,value是列表类型
res = defaultdict(list)
#key是1出现的次数,value是次数相同的值
for i in range(len(arr)):
num = bin(arr[i]).count('1')
res[num].append(arr[i])
#对字典的key进行排序
res = sorted(res.items(),key = lambda x:x[0])
result = []
#对于value进行排序,然后一次拼接起来
for k,v in res:
v.sort()
result+=v
return result
- 这个题目有一点小坑:如果出现次数相同的有很多个数字,那就对这这些数字进行从小到大的排序
- 定义一个字典:key:1出现的次数;value:所有1出现次数相同的数字的集合
- 遍历原始初始对字典进行填充
- 根据字典的key进行排序
- 对字典的value分别依次排序然后执行依次拼接就可以了
总结:题目还是比较简单,就是考一个hash表,但是对于出现次数相同的时候就需要注意,有一点坑。