LeetCode之二进制求和(六十七)
发布日期:2021-06-30 21:11:05
浏览次数:2
分类:技术文章
本文共 825 字,大约阅读时间需要 2 分钟。
目录
题目
(原题链接:)
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"示例 2:
输入: a = "1010", b = "1011"
输出: "10101"提示:
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4 字符串如果不是 "0" ,就都不含前导零。解题
方法一、中规中矩法
分析:首先将字符串a和b进行补0对齐,然后按照我们对于二进制运算的计算顺序,从右侧(低位)开始相加计算,同时注意进位问题,思路很简单,下面直接看代码。
代码:
class Solution {public: string addBinary(string a, string b) { int asize = a.size(), bsize = b.size(); while (asize > bsize) //左侧补0 { b = '0' + b; bsize++; } while (asize < bsize) //左侧补0 { a = '0' + a; asize++; } int carry = 0; //进位 for (int i = asize - 1; i >= 0; i--) { int sum = a[i] - '0' + b[i] - '0' + carry; a[i] = (sum) % 2+'0'; //本位数值 carry = sum / 2; //进位 } if (carry > 0) { //最高位进位 a = '1' + a; } return a; }};
时间复杂度:O(n+m)。
空间复杂度:O(1)。
执行结果:
转载地址:https://liuzhen.blog.csdn.net/article/details/107095246 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月22日 22时05分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
阿里P8大神教你十分钟构建好SpringBoot + SSM框架 成功晋升
2019-04-30
Linux运维-搭建高可用Redis缓存
2019-04-30
膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了
2019-04-30
Linux 常用命令
2019-04-30
Android之Handler机制篇
2019-04-30
Android之网络协议篇
2019-04-30
Android之RecyclerView篇
2019-04-30
Android之Retrofit基本用法篇
2019-04-30
Netty与网络协议资料整理
2019-04-30
Golang相关资源整理
2019-04-30
设置Golang的开发环境
2019-04-30
对HTTP/2的部分理解
2019-04-30
Golang 逃逸分析
2019-04-30
golang实现大数据量文件的排序
2019-04-30
golang中的time包
2019-04-30
golang fmt包中的占位符
2019-04-30
Docker下使用Redis
2019-04-30
Redis的主从和集群设置
2019-04-30
对Redis Cluster的理解
2019-04-30