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

1 模拟——67. 二进制求和

1 模拟

67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"

算法设计

可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对应的位A、B相加,并加上进位,和值为sum = A + B + carry,进位carry = sum / 2,余数sum % 2作为结果。
例如,a = “1010”, b = “110”。
(1)初始时,进位carry=0,从低位开始计算,A=0,B=0,和值sum=A+B+carry=0。进位carry= sum / 2 = 0,余数作为结果sum % 2 = 0。
在这里插入图片描述
(2)从低位到高位继续处理,进位carry=0,A=1,B=1,和值sum=A+B+carry=2。进位carry= sum / 2 = 1,余数作为结果sum % 2 = 0。
在这里插入图片描述
(3)从低位到高位继续处理,进位carry=1,A=0,B=1,和值sum=A+B+carry=2。进位carry= sum / 2 = 1,余数作为结果sum % 2 = 0。
在这里插入图片描述
(4)从低位到高位继续处理,进位carry=1,A=0,此时第二个字符串已经处理完毕,按照0计算,B=0,和值sum=A+B+carry=2。进位carry = sum / 2 = 1,余数作为结果sum % 2 = 0。
在这里插入图片描述
(5)此时第两个字符串均已处理完毕,但是进位不为0,A=0,B=0,和值sum=A+B+carry=1。进位carry = sum / 2 = 0,余数作为结果sum % 2 = 1。
在这里插入图片描述
在算法实现中,可以将每次的计算结果转字符串,加上已计算结果,res = to_string(sum % 2) + res,最后返回字符串res。

算法实现

//LeetCode67 二进制求和 
string addBinary(string a, string b) {string res; // 返回结果 int carry = 0; // 进位 int i = a.size() - 1; // 从低位开始 int j = b.size() - 1;while (i >= 0 || j >= 0 || carry != 0) { // 有未处理完字符或者有进位 int A = i >= 0 ? a[i--] - '0' : 0;int B = j >= 0 ? b[j--] - '0' : 0;int sum = A + B + carry; // 和值 carry = sum / 2; // 商为进位 res = to_string(sum % 2) + res; // 余数转字符串,加上已计算结果 }return res;
}

算法分析

时间复杂度为O(max(n,m)),nm分别为两个二进制字符串的长度,空间复杂度为 O(1)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mac m2 安装 nvm
  • Java操作Elasticsearch的实用指南
  • 记录工作中学习进度
  • 大零售时代:开源 AI 智能名片、2+1 链动与 O2O 商城小程序引领融合新趋势
  • 【NLP自然语言处理】文本的数据分析------迅速掌握常用的文本数据分析方法~
  • Android中如何实现adb向应用发送特定指令并接收返回
  • 攻防世界 supersqli
  • 【Java中的位运算和逻辑运算详解及其区别】
  • 橘子学ES实战操作之管道类型Ingest pipelines的基本使用
  • 1-10 图像增强对比度 opencv树莓派4B 入门系列笔记
  • 【软件设计师真题】第一大题---数据流图设计
  • OCC开发_变高箱梁全桥建模
  • 书生大模型全链路开源开放体系笔记
  • 设计模式 19 观察者模式
  • GD - EmbeddedBuilder - 给已有工程换MCU
  • @angular/forms 源码解析之双向绑定
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Angular 响应式表单 基础例子
  •  D - 粉碎叛乱F - 其他起义
  • Javascript编码规范
  • SAP云平台里Global Account和Sub Account的关系
  • tensorflow学习笔记3——MNIST应用篇
  • WebSocket使用
  • 关于Flux,Vuex,Redux的思考
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 说说动画卡顿的解决方案
  • 无服务器化是企业 IT 架构的未来吗?
  • 阿里云服务器如何修改远程端口?
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​ubuntu下安装kvm虚拟机
  • ​人工智能书单(数学基础篇)
  • # Apache SeaTunnel 究竟是什么?
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.13) SiK无线电高级配置(六)
  • (WSI分类)WSI分类文献小综述 2024
  • (ZT)薛涌:谈贫说富
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十六)串口UART
  • (四)库存超卖案例实战——优化redis分布式锁
  • (算法)大数的进制转换
  • (译)2019年前端性能优化清单 — 下篇
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)c++ std::pair 与 std::make
  • (转)setTimeout 和 setInterval 的区别
  • (转载)利用webkit抓取动态网页和链接
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 服务 ServiceController
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项