LeetCode397. Integer Replacement

题意

一个数n, 若为偶数, 则除2, 若为奇数, 则加减1; 求其最终为1, 需要几步

方法

位运算

代码

class Solution {
public:
    int integerReplacement(int n) {
        if(n==1)    return 0;
        int result=0;
        while((n&1)==0)
        {
            ++result;
            n=n>>1;
        }
        if(n==1)
        {
            return result;
        }
        int judge=1,temp=0;
        while((judge&n)==judge)
        {
            ++temp;
            judge=judge<<1;
        }
        int p=n>>temp;
        int first=(p==0)?2*(temp-1):integerReplacement(p)+2*(temp);
        int second=integerReplacement(p|1)+temp+1;
        return result+min(first,second);
    }
};
posted @   Figure_at_a_Window  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示