Leetcode 397. Integer Replacement

Given a positive integer n and you can do operations as follow:less

If n is even, replace n with n/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?code

Example:ip

Input: 7rem

Output: 4it

Explanation: 7 -> 8 -> 4 -> 2 -> 1 or 7 -> 6 -> 3 -> 2 -> 1io

Tips: The infamous test with n=3 fails for that strategy because 11 ->10 -> 1 is better than 11 -> 100 -> 10 -> 1.test

Solution:im

If n is even, halve it.
If n=3 or n-1 has less 1's than n+1,
decrement n. Otherwise, increment n.while

Code:co

public int integerReplacement(int n){
    int count = 0;
    while(n!= 1){
        if((n&1)==0){
            n>>>=1;
        }else if(n ==3 ||((n >>>1) & 1 ==0){
            --n;
        } else{
            ++n;
        }
        count++;
     }
    return count;

}
相關文章
相關標籤/搜索