天天看點

找與一個數二進制表示1的個數相同的相鄰的兩個數

所謂相鄰,就是說所有這樣的書排序好之後相鄰,也就是滿足條件的大于它的最小的數和滿足條件的小于他的最大的數

大于它的最小的數:

從右往左,找到第一個右邊有1的0, 将0,1互換,最後将這個位置後面的1全部挪到最後面

11001100->11010100->11010001

小于它的最大的數:

從右往左,找到第一個右邊有0的1, 将0,1互換,然後再将這個位置右邊所有的1盡可能的忘左移動

110011->101011->101110

繼續閱讀