# 397. Integer Replacement

## 1. Question

Given a positive integer n, you can apply one of the following operations:

1. If n is even, replace n with n / 2.
2. If n is odd, replace n with either n + 1 or n - 1.

Return the minimum number of operations needed for n to become 1.

## 2. Examples

Example 1:

Input: n = 8
Output: 3
Explanation: 8 -> 4 -> 2 -> 1


Example 2:

Input: n = 7
Output: 4
Explanation: 7 -> 8 -> 4 -> 2 -> 1
or 7 -> 6 -> 3 -> 2 -> 1


Example 3:

Input: n = 4
Output: 2


## 3. Constraints

• 1 <= n <= 231 - 1

## 5. Solutions

### 5.1. 朴素的实现

class Solution {

public int integerReplacement(int n) {
}

private int toOne(long n) {
if (n == 1) {
return 0;
}

if (n % 2 == 0) {
} else {
return Math.min(toOne(n + 1), toOne(n - 1)) + 1;
}
}

}


### 5.2. 用上二进制实现

class Solution {

public int integerReplacement(int n) {
}

private int toOne(long n) {
if (n == 1) {
return 0;
}

if ((n & 1) == 0) {
} else {
return Math.min(toOne(n + 1), toOne(n - 1)) + 1;
}
}

}


## 6. Accepted

• 47/47 cases passed (0 ms)
• Your runtime beats 100 % of java submissions
• Your memory usage beats 94.08 % of java submissions (34.9 MB)
class Solution {

public int integerReplacement(int n) {
}

private int toOne(long n) {
if (n == 1) {
return 0;
}

if ((n & 1) == 0) {
} else {
if (n == 3) {
return 2;
} else if ((((n + 1) >> 1) & 1) == 0) {