题目内容
定义f(x)为x在二进制表示下的1个数,例如f(7)=3,f(8)=1,f(9)=2。
定义g(x)为第一个比x大的数字y,使得f(x)=f(y),例如g(1)=2,g(2)=4,g(3)=5。
思路:二进制模拟
考虑g(x)操作为:从低位到高位找到第一个连续1段,然后最高位那个1往左移动一位,其余的1移动至最低位即可。
例如:312 = 100111000
g(312) = 10100011
特别的,g(1) = 2 (10), 这种二进制需要进位的情况,我们在操作二进制字符串之前需要对最高位补全一个前导零。