码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]397. Integer Replacement

时间:2018-03-01 14:51:58      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:问题   post   倒数   color   integer   turn   replace   ace   log   

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

标签:问题   post   倒数   color   integer   turn   replace   ace   log   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!