Leetcode 1356. Sort Integers by The Number of 1 Bits
Posted SnailTyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 1356. Sort Integers by The Number of 1 Bits相关的知识,希望对你有一定的参考价值。
文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. Description
2. Solution
**解析:**由于最大数字不超过10000,因此1
的位数不超过14位,注意+=
的运算优先级要低于&
,而+
的运算优先级要高于&
。Version 1用右移运算获得1
的个数,Version 2用的bin
函数,Version 3通过python自带的排序函数进行排序。Version 4使用字典保存结果。
- Version 1
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
result = []
stat = [[] for i in range(15)]
for num in arr:
bits = self.bitCount(num)
stat[bits].append(num)
for temp in stat:
temp.sort()
result += temp
return result
def bitCount(self, num):
count = 0
while num:
count += (num & 1)
num = num >> 1
return count
- Version 2
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
arr.sort()
result = []
stat = [[] for i in range(15)]
for num in arr:
bits = bin(num).count('1')
stat[bits].append(num)
for temp in stat:
result += temp
return result
- Version 3
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
return sorted(arr, key=lambda x: [bin(x).count('1'), x])
- Version 4
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
arr.sort()
result = []
stat = collections.defaultdict(list)
for num in arr:
stat[bin(num).count('1')].append(num)
for index in sorted(list(stat.keys())):
result += stat[index]
return result
Reference
以上是关于Leetcode 1356. Sort Integers by The Number of 1 Bits的主要内容,如果未能解决你的问题,请参考以下文章
1356. Sort Integers by The Number of 1 Bits