然后arr[i] += k * 10001,然后再对arr[]进行排序。这样就可以实现按照二进制中数字1的数目升序
最后返回arr[] % 10001即可
AC代码
classSolution{publicint[]sortByBits(int[] arr){int len = arr.length;for(int i =0; i < len; i++)
arr[i]+= Integer.bitCount(arr[i])*10001;
Arrays.sort(arr);for(int i =0; i < len; i++)
arr[i]%=10001;return arr;}}
本地测试代码
package com.company;import java.util.Arrays;publicclassSolution_1356{publicstaticint[]sortByBits(int[] arr){int len = arr.length;for(int i =0; i < len; i++)
arr[i]+= Integer.bitCount(arr[i])*10001;
Arrays.sort(arr);for(int i =0; i < len; i++)
arr[i]%=10001;return arr;}publicstaticvoidmain(String[] args){
System.out.println(Arrays.toString(sortByBits(newint[]{0,1,2,3,4,5,6,7,8})));
System.out.println(Arrays.toString(sortByBits(newint[]{1024,512,256,128,64,32,16,8,4,2,1})));
System.out.println(Arrays.toString(sortByBits(newint[]{10000,10000})));}}