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
这道题可以用递归的方法,或者用如下方法,主要思路是看这个数的二进制,奇数二进制表示法最后两位为01或者11, 如果01,则减1比较好,其他情况加1比较好,当然3是个例外,3--2--1比3--4--2--1快。
public class Solution {
public int integerReplacement(int n) {
int count=0;
double num=n;
while(num>1)
{
if(num==3) return count+2;
if(num%2==0) num=num/2;
else if(num%4==1) num=num-1;
else num=num+1;
count++;
}
return count;
}
}