leetcode 67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为非空字符串且只包含数字 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结果:

更多题解移步公众号免费获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值