Integer二进制函数:
- public static int bitCount(int i):数字i的二进制中1的个数
- public static String toBinaryString(int i):将十进制i转化为二进制
- public static String toOctalString(int i):将十进制i转化为八进制
- public static String toHexString(int i):将十进制i转化为十六进制
方法一:将元素于二进制个数相关联。
可以将每一个数字的二进制中1的数量于数字本身相关联,所以可以采用在数字原本的基础上Integer.bitCount(arr[i])*10001+arr[i](10001是因为数组的最大值只能是10000.)。在进行排序。
class Solution {
public int[] sortByBits(int[] arr) {
for(int i=0;i<arr.length;i++){
arr[i]=Integer.bitCount(arr[i])*10001+arr[i];
}
Arrays.sort(arr);
for(int i=0;i<arr.length;i++){
arr[i]=arr[i]%10001;
}
return arr;
}
}
方法二:实现自定义的构造器
class Solution {
public int[] sortByBits(int[] arr) {
Integer[] a=new Integer[arr.length];
for(int i=0;i<arr.length;i++){
a[i]=new Integer(arr[i]);
}
Arrays.sort(a,new Comparator<Integer>(){
public int compare(Integer a,Integer b){
if(Integer.bitCount(a)!=Integer.bitCount(b)){
return Integer.bitCount(a)-Integer.bitCount(b);
}else {
return a-b;
}