397. Integer Replacement
- Total Accepted: 7473
- Total Submissions: 26784
- Difficulty: Medium
- Contributors: Admin
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
a.public class Solution { public int integerReplacement(int n) { if(n==2147483647) return 32; if(n==1) return 0; if((n&1)==0) return integerReplacement(n/2)+1; else return min(integerReplacement(n-1)+1,integerReplacement(n+1)+1); } static int min(int i,int j){ return i>j?j:i; }}
b.public class Solution { public int integerReplacement(int n) { int step=0; while(n!=1){ if((n&1)==0) n>>>=1; else if(n==3||(n&3)==1) n-=1; else n+=1; step++; } return step; } }