[leetcode]397. Integer Replacement

Posted stAr_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode]397. Integer Replacement相关的知识,希望对你有一定的参考价值。

public int integerReplacement(int n) {
        /*
        可以将问题想做是一串二进制,怎么把二进制最快的处理到只剩下一位1
        问题的关键是奇数的情况有两种,不确定用哪一种,如果两种都尝试会TLE
        +1或者-1,更快的是能尽快消除一位或者几位
        看了答案,方法是尽快能让后两位都变成0,也就是可以连续除以2:
        奇数的最后一位肯定是1,如果倒数第二位是1,那么+1比较好
        如果倒数第二位是0,那么-1比较好
         */
        int res = 0;
        long num = n;
        while (num!=1)
        {
            if (num%2==0)
                num/=2;
            else
            {
                //3是一种特殊情况,它需要-1
                if (num==3)
                {
                    res+=2;
                    break;
                }
                //判断倒数第二位进行处理
                num = (num&2)==2?num+1:num-1;

            }
            res++;
        }
        return res;
    }

 

以上是关于[leetcode]397. Integer Replacement的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode]397. Integer Replacement

Leetcode 397 整数替换

leetcode_397

LeetCode 397 整数替换[递归] HERODING的LeetCode之路

[LeetCode #13] Roman to Integer

LeetCode 397. 整数替换 / 594. 最长和谐子序列 / 559. N 叉树的最大深度