397. Integer Replacement
Difficulty: Medium
Topics: Math, Bit Manipulation
Similar Questions:
Problem:
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?
</p>
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 </pre> </p>
Solutions:
class Solution {
public:
int integerReplacement(int N) {
int count = 0;
long n = N; // to prevent overflow
while (n > 3) {
if (n % 2 == 0) {
n = (n >> 1);
} else {
if ((n & 0x2) == 0) {
n -= 1;
} else {
n += 1;
}
}
++count;
}
if (n == 3) return count + 2; // special check
if (n == 2) return count + 1; // special check
return count;
}
};