给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
题解:
1.两个二进制字符串
2.返回它们的和
3.两字符串非空,只包含0,1
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。
解题思路:
-
从后往前取,模拟十进制加法,这里满二进一
-
用一个容器先存下,此时相反
-
最后翻转整个字符串内容
C/C++题解:
class Solution {
public:
string addBinary(string a, string b) {
int i=a.size()-1,j=b.size()-1;
int carry = 0;
string ans = "";
while(i>=0 || j>=0 || carry){
int res = carry;
if(i>=0){
res += (a[i]-'0');//取尾元素加和
i -= 1;}//向前走
if(j>=0) {
res += (b[j]-'0');//取尾元素加和
j -= 1;}//向前走
carry = res / 2;//满二进一,留下进位
ans.push_back(res % 2 + '0');}//变成字符放进去
reverse(ans.begin(),ans.end());//反转整个字符串
return ans; }};
Debug结果:
Java题解:
class Solution {
public String addBinary(String a, String b) {
StringBuffer ans = new StringBuffer();
int i=a.length()-1,j=b.length()-1;
int carry = 0;
while(i>=0 || j>=0 || carry==1){
int res = carry;
if(i>=0){
res += (a.charAt(i)-'0');//取尾元素加和
i -= 1; }//向前走
if(j>=0){
res += (b.charAt(j)-'0');//取尾元素加和
j -= 1; }//向前走
carry = res / 2;//满二进一,留下进位
ans.append((char)(res % 2 + '0')); }//变成字符放进去
ans.reverse();//反转整个字符串
return ans.toString(); }}
Debug结果:
Python题解:
class Solution(object):
def addBinary(self, a, b):
""":type a: str:type b: str:rtype: str"""
i, j, carry, ans = len(a)-1, len(b)-1, 0, ""
while i>=0 or j>=0 or carry==1:
res = carry
if i >= 0:
res += int(a[i]) #取尾元素加和
i -= 1 #向前走
if j >= 0:
res += int(b[j]) #取尾元素加和
j -= 1 #向前走
carry = res // 2 #满二进一,留下进位
ans += str(res % 2) #变成字符放进去
return ans[::-1] #反转整个字符串
Debug结果:
更多题解移步公众号免费获取