找与一个数二进制表示1的个数相同的相邻的两个数

所谓相邻,就是说所有这样的书排序好之后相邻,也就是满足条件的大于它的最小的数和满足条件的小于他的最大的数


大于它的最小的数:

从右往左,找到第一个右边有1的0, 将0,1互换,最后将这个位置后面的1全部挪到最后面
11001100->11010100->11010001
小于它的最大的数:
从右往左,找到第一个右边有0的1, 将0,1互换,然后再将这个位置右边所有的1尽可能的忘左移动
110011->101011->101110

原文地址:https://www.cnblogs.com/suncoolcat/p/3304108.html