思路:一个简单的思路就是先求出每一个数x的二进制位数count,然后把它加入map的映射中,即x加入m[count]的数组中,map<int ,vector> m;然后m每一个key里面的value进行排序,排完就一次加入res中,因为map保证key的有序性,所以最终符合要求;
class Solution {
public:
map<int, vector<int>> m;
static bool cmp(int a, int b)
{
return a < b;
}
void count(int x) //计算x中1的数目
{
int count = 0;
int xx = x;
while (xx)
{
if (xx & 1)
{
count++;
}
xx = xx >> 1;
}
m[count].push_back(x);
}
vector<int> sortByBits(vector<int> &arr)
{
int len = arr.size();
if (len < 2)
{
return arr;
}
vector<int> res;
for (int i = 0; i < len; i++)
{
count(arr[i]);
}
for (auto s : m)
{
int len_second = s.second.size();
if (len_second > 1)
{
sort(s.second.begin(), s.second.end(), cmp);
}
for (int i = 0; i < len_second; i++)
{
res.push_back(s.second[i]);
}
}
return res;
}
};