public int integerReplacement(int n) { /* 可以将问题想做是一串二进制,怎么把二进制最快的处理到只剩下一位1 问题的关键是奇数的情况有两种,不确定用哪一种,如果两种都尝试会TLE +1或者-1,更快的是能尽快消除一位或者几位 看了答案,方法是尽快能让后两位都变成0,也就是可以连续除以2: 奇数的最后一位肯定是1,如果倒数第二位是1,那么+1比较好 如果倒数第二位是0,那么-1比较好 */ int res = 0; long num = n; while (num!=1) { if (num%2==0) num/=2; else { //3是一种特殊情况,它需要-1 if (num==3) { res+=2; break; } //判断倒数第二位进行处理 num = (num&2)==2?num+1:num-1; } res++; } return res; }