Given a positive integer n and you can do operations as follow:
- If n is even, replace n with
n/2
. - If n is odd, you can replace n with either
n + 1
orn - 1
.
What is the minimum number of replacements needed for n to become 1?
Example 1:
Input: 8 Output: 3 Explanation: 8 -> 4 -> 2 -> 1
Example 2:
Input: 7 Output: 4 Explanation: 7 -> 8 -> 4 -> 2 -> 1 or 7 -> 6 -> 3 -> 2 -> 1
如果是偶数直接除以2,奇数看倒数第二位,如果为0则减一,否则加一,这样能有效减少1的数目,不过三的情况是例外,减一更好
public class Solution {
public int integerReplacement(int n) {
int ans = 0;
while(n!=1){
if((n & 1) == 0) n >>>= 1;
else if(n==3 || ((n>>1)&1)==0) n--;
else n++;
ans++;
}
return ans;
}
}