当前位置: 首页 > news >正文

LeetCode 1404.将二进制表示减到 1 的步骤数:模拟+高精度模拟玩玩(运算符重载)

【LetMeFly】1404.将二进制表示减到 1 的步骤数:模拟+高精度模拟玩玩(运算符重载)

力扣题目链接:https://leetcode.cn/problems/number-of-steps-to-reduce-a-number-in-binary-representation-to-one/

给你一个以二进制形式表示的数字s。请你返回按下述规则将其减少到 1 所需要的步骤数:

  • 如果当前数字为偶数,则将其除以2

  • 如果当前数字为奇数,则将其加上1

题目保证你总是可以按上述规则将测试用例变为 1 。

示例 1:

输入:s = "1101"输出:6解释:"1101" 表示十进制数 13 。 Step 1) 13 是奇数,加 1 得到 14 Step 2) 14 是偶数,除 2 得到 7 Step 3) 7 是奇数,加 1 得到 8 Step 4) 8 是偶数,除 2 得到 4 Step 5) 4 是偶数,除 2 得到 2 Step 6) 2 是偶数,除 2 得到 1

示例 2:

输入:s = "10"输出:1解释:"10" 表示十进制数 2 。 Step 1) 2 是偶数,除 2 得到 1

示例 3:

输入:s = "1"输出:0

提示:

  • 1 <= s.length <= 500
  • s由字符'0''1'组成。
  • s[0] == '1'

解题方法:模拟

Python直接转int,C++使用字符串双端队列代替

  • 时间复杂度O ( l e n ( s ) ) O(len(s))O(len(s))
  • 空间复杂度O ( log ⁡ s ) O(\log s)O(logs)O ( l e n ( s ) ) O(len(s))O(len(s))

AC代码

C++
/* * @LastEditTime: 2026-02-27 22:29:56 */classLetsNum{private:// 低位->高位deque<char>num;public:// From binary stringLetsNum(string&s){for(charc:s){*this<<=1;*this+=c;}}LetsNum&operator++(int){intcarry=1;for(deque<char>::iterator it=num.begin();it!=num.end();it++){carry+=*it-'0';*it=carry%10+'0';carry/=10;}if(carry){num.push_back(carry+'0');}return*this;}// only 0/1 supportedLetsNum&operator+=(constint&n){if(!n){return*this;}(*this)++;return*this;}// only 0/1 supportedLetsNum&operator+=(constchar&c){*this+=c-'0';return*this;}// only <<1 supportedLetsNum&operator<<=(constint&){intcarry=0;for(deque<char>::iterator it=num.begin();it!=num.end();it++){carry+=(*it-'0')*2;*it=carry%10+'0';carry/=10;}if(carry){num.push_back(carry+'0');}return*this;}// only >>1 supportedLetsNum&operator>>=(constint&){intmod=0;for(deque<char>::reverse_iterator it=num.rbegin();it!=num.rend();it++){mod=mod*10+(*it-'0');*it=mod/2+'0';mod%=2;}if(*num.rbegin()=='0'){num.pop_back();}return*this;}// only 1 supportedbooloperator!=(constint&){returnnum.size()!=1||*num.begin()!='1';}boolisOdd(){return(*num.begin()-'0')%2;}voidprint(){for(deque<char>::reverse_iterator it=num.rbegin();it!=num.rend();it++){putchar(*it);}puts("");}};classSolution{public:intnumSteps(string s){LetsNumnum(s);intans=0;while(num!=1){if(num.isOdd()){num+=1;}else{num>>=1;}ans++;}returnans;}};#ifdefined(_WIN32)||defined(__APPLE__)/* 1101 */intmain(){string s;while(cin>>s){Solution sol;cout<<sol.numSteps(s)<<endl;}return0;}#endif
Python
''' LastEditTime: 2026-02-26 23:59:25 '''""" 1101 1110 111 1000 100 10 1 """classSolution:defnumSteps(self,s:str)->int:a=int(s,2)ans=0whilea!=1:ifa%2:a+=1else:a//=2ans+=1# print(a)returnans# print(Solution.numSteps('', '1101'))

C++完胜!(bushi)

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.jsqmd.com/news/418530/

相关文章:

  • 程序员自述:一款小众电脑工具,从闲时练手到月入3万,我踩了所有坑
  • 2026年论文降AI越改越高?可能是这3个原因在作怪 - 我要发一区
  • 2026年毕业论文AI率超30%?研究生亲测5款知网降AI工具后只推荐这个 - 我要发一区
  • Cloudflare人机验证与连接安全机制解析
  • 一周AI动态:开源模型与新工具
  • 2026年武汉抖音短视频代运营公司排行榜TOP5发布 - 精选优质企业推荐榜
  • 加密货币与银行巨头动态简报
  • DeepSeek写论文后怎么快速过知网AIGC检测?降AI工具完整操作教程 - 我要发一区
  • 直击装修痛点|成都里林设计:精准解决成都业主装修前所有担心,省心装家不踩坑 - 推荐官
  • 【2025最新】基于SpringBoot+Vue的PS游戏服务网站管理系统源码+MyBatis+MySQL
  • 论文写作效率革命:六种由人工智能驱动的文献引用管理技巧详解
  • SpringBoot+Vue +办公管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 智能化文献管理解决方案:六种AI辅助论文引用技术的实践应用
  • python: Mediator Pattern
  • Java Web PS游戏服务网站系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 2026年短视频运营推广公司5强推荐名单发布 - 精选优质企业推荐榜
  • 学术研究中的AI应用实践:六种高效文献引用自动化方法全解析
  • Python基于Vue的酒店管理系统的设计与实现 django flask pycharm
  • 2026年泉州抖音短视频代运营公司推荐榜单TOP5发布 - 精选优质企业推荐榜
  • 企业级高校党支部党务管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 2026年哈尔滨短视频运营推广公司排行榜TOP5发布 - 精选优质企业推荐榜
  • Vue3 事件处理
  • Python基于Vue的酷听音乐音乐网站 django flask pycharm
  • 2026年贵州抖音短视频运营公司5强推荐榜单公布 - 精选优质企业推荐榜
  • Redis 服务器详解
  • 2026年重庆抖音短视频代运营公司5强推荐榜单发布 - 精选优质企业推荐榜
  • Matplotlib Pyplot:深入理解Python数据可视化库
  • Java SpringBoot+Vue3+MyBatis nuct产品售后管理系统系统源码|前后端分离+MySQL数据库
  • 2026年3月装修,成都本地装修公司的施工流程与工期如何合理规划 - 推荐官
  • 2026年3月,成都比较好的装修公司哪家可靠?从设计到落地完美落地 - 推荐官