首页 > 其他 > 详细

[leetcode]397. Integer Replacement

时间:2018-03-01 14:12:22      阅读:208      评论:0      收藏:0      [点我收藏+]
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

原文:https://www.cnblogs.com/stAr-1/p/8488035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!