题目:
代码(暴力搜索,效率较低):
class Solution {
public:
int integerReplacement(int n) {
if(n==1) return 0;
if(n%2==0) return 1+integerReplacement(n/2);
else if(n<2147483647) return 1+min(integerReplacement(n+1),integerReplacement(n-1));
return 1+min(31,integerReplacement(n-1));
}
};
榜首代码:
class Solution {
public:
int integerReplacement(int n) {
if(n == INT_MAX) return 32;
int cnt = 0;
while(n != 1){
if((n & 1) == 0){
n >>= 1;
cnt++;
}
else{
n += ((n&2)==0 || n==3) ? -1 : 1;
cnt++;
}
}
return cnt;
}
};
榜首思路:每次操作让其二进制位1的数目尽量少,但3特殊