方法一:如果是偶数则向右移动┅位如果是奇数就判断一下+1还是-1次数少.【动态规划】
时间复杂度为o(n);该算法要每个数都要算一次,然后迭代
方法2:复杂度可以降低,峩们将n转为2进制
1 当num末尾一位为0,理所当然选择右移一位;
2 当num末尾位为1, xx101和xx001时对于第一种情况,选择+1-1的次数一样,对于后者则选择-1所以对于01的情况,选择-1
3 当num末尾为11, x1011x0011时, 对于第一种+1,-1一样对于后者选择+1,所以对于011选择+1;
4 当num末尾为111时,对于第一种选择+1對于后者选则+1,所以都选择加+1
这里的复杂度为num的二进制位数log2(n)