概述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例1:
输入: a = "11", b = "1"
输出: "100"
示例2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
每个字符串仅由字符 '0'
或 '1'
组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0"
,就都不含前导零。
整体思路:
我们通过举例子手动运算可以知道相加有三种情况
(1)0+0=0进0
(2)0+1=1+0=1进0
(3)1+1=1进1
这三种情况我们都考虑了a,b和进位数,因此从这个来入手。
相加时除了判断两个数相加是否为2还需要判断是否之前的有进位1,需要对进位进行处理,count即表示有无进位,res是我们的结果集。
代码题解:
class Solution {
public:
string addBinary(string a, string b) {
if(b.size()>a.size())//a存放长度较大的字符串
{
string temp=b;
b=a;
a=temp;
}
int m=a.size();//m为大,所以我们对b字符串进行补位时就要补成m位
int n=b.size();
for(int k=0;k<m-n;k++)//字符串加字符串,加到m-n-1位即可
{
b="0"+b;//字符加字符
}
string res;
int count=0;
for(int i=m-1;i>=0;i--)
{
if((a[i]-'0'+b[i]-'0'+count)==0)//上述第一种情况
{
res="0"+res;//每段的这个地方的相加以及count的赋值是值得好好思考的地方
count=0;
}
else if((a[i]-'0'+b[i]-'0'+count)==1)
{
res="1"+res;
count=0;
}
else if((a[i]-'0'+b[i]-'0'+count)==3)//这个就是本身1+1而且还有进位的情况
{
res="1"+res;
count=1;
}
else
{
res="0"+res;
count=1;
}
}
if(count==1)//最后的位数相加如果还有进位,那就进1,“1”+res
res="1"+res;
return res;//最后返回结果集
}
};
整体代码未经优化,不太好理解的可以直接带例子进去就比较好理解。
最后
以上就是沉默花卷为你收集整理的leetcode二进制求和的全部内容,希望文章能够帮你解决leetcode二进制求和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复