397. Integer Replacement
Given a positive integer n and you can do operations as follow:
1.If n is even, replace n with n/2.
2.If n is odd, you can replace n with either n + 1 or n - 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
Approach
1.题目大意是当数字为偶数的时候只能进行除2操作,当数字为奇数的时候只能进行加1或减一操作,当数字变为1的时候需要多少次操作。这道题可以直接深搜即可,当数字为偶数的时候那就搜索加1和减1的情况,然后当数字为奇数的时候搜索除2的情况。
Code
class Solution {
public:
int minn = INT_MAX;
void DFS(long long n, int cnt) {
if (cnt >= minn || n == 0)return;
if (n == 1) {
minn = min(minn, cnt);
return;
}
if (n & 1) {
DFS(n - 1, cnt + 1);
DFS(n + 1, cnt + 1);
}
else {
DFS(n >> 1, cnt + 1);
}
}
int integerReplacement(int n) {
DFS(n, 0);
return minn;
}
};