利用位运算解决问题
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
dic1 = {}
for val in arr:
dic1[val] = self.num_one(val)
arr.sort(key=lambda x: (dic1[x], x))
return arr
def num_one(self, val):
if val > 0:
return self.num_one(val >> 1) + (val & 1)
return 0
还有另外一种统计1的个数的方法
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
dic1 = {}
for val in arr:
dic1[val] = self.num_one(val)
arr.sort(key=lambda x: (dic1[x], x))
return arr
def num_one(self, val):
num = 0
while val:
val = val & (val - 1)
num += 1
return num