题目链接:
题目:
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters
1
or0
.Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
题目分析:
给定两个字符串,分别表示两个二进制数,求两个二进制数相加。
解题思路:
简单模拟题,就模拟二进制加法即可,从最低位相加,满二进一,考虑进位。
第一步,先考虑最短的那个字符串遍历,这样子两个字符串相加,满二进一,记得算进位。
第二步,剩下考虑长的字符串,遍历剩下的,如果某次进位不为1,那就相当于没变化;不然就单个字符串加进位遍历操作。
最后要考虑,此时 进位为1的话,在字符串最前面加上 "1"。
AC代码:
class Solution {
public:
string addBinary(string a, string b) {
if(a.size() < b.size())
{
string temp = a;
a = b;
b = temp;
}
int i = a.size()-1;
int j = b.size()-1;
int c = 0;
int res;
while(j>=0)
{
res = c+(a[i]-'0')+(b[j]-'0');
c = res/2;
res %= 2;
a[i] = res+'0';
--i;
--j;
}
while(i >= 0)
{
if(c == 0)
break;
res = c+(a[i]-'0');
c = res/2;
res %= 2;
a[i] = res+'0';
--i;
}
if(c == 1)
a = "1"+a;
return a;
}
};