题目描述:
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
对于一个偶数,可以得到n/2,对于一个奇数,可以得到n+1或n-1,求最少需要多少步将给定的数变为1。这道题还是利用递归,对于偶数的情况只有一种递归可能,对于奇数则有两种可能,不断递归直到这个数变为1就返回。
class Solution {
public:
int integerReplacement(int n) {
long long m=n;
return integerReplacement_recur(m,0);
}
int integerReplacement_recur(long long n, int count)
{
if(n==1) return count;
if(n%2==0) return integerReplacement_recur(n/2,count+1);
else return min(integerReplacement_recur(n+1,count+1),integerReplacement_recur(n-1,count+1));
}
};