leetcode397. Integer Replacement

题目要求

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 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

思路和代码

能够发现除二后所获得的结果必定优于加减1。所以,若是当前奇数除二为偶数,则直接作除法,不然将当前奇数加一再除以二,获得偶数的结果。面试

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;
    }

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~微信

相关文章
相关标签/搜索