zoukankan      html  css  js  c++  java
  • [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;
        }
  • 相关阅读:
    表格的增删改查
    选择省份时,自动显示对应省份的城市
    弹框提示用户输入
    dom
    css基础
    HTML基础
    B
    poj 1840 Eqs
    hdu 1166 敌兵布阵(线段树)
    poj 2586 Y2K Accounting Bug
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8488035.html
Copyright © 2011-2022 走看看