[leetcode] Add Binary

本文详细解析了如何将两个二进制字符串相加并返回结果字符串的方法,包括算法实现步骤和代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

From : https://leetcode.com/problems/add-binary/

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

class Solution {
public:
    string addBinary(string a, string b) {
        if(a=="0") return b;
        if(b=="0") return a;
        string ans;
        int ia = a.size()-1, ib = b.size()-1, carry = 0, va, vb;
        while(ia >= 0 || ib >= 0) {
            if(ia < 0) {va = 0; vb = b[ib]-'0';}
            else if(ib < 0) {vb = 0; va = a[ia]-'0';}
            else {va = a[ia]-'0';vb = b[ib]-'0';}
            int sum = va + vb + carry;
            switch(sum) {
                case 0: {ans = '0' + ans; carry = 0; break;}
                case 1: {ans = '1' + ans; carry = 0; break;}
                case 2: {ans = '0' + ans; carry = 1; break;}
                case 3: {ans = '1' + ans; carry = 1; break;}
            }
            ia--; ib--;
        }
        if(carry) ans = '1' + ans;
        return ans;
    }
};

public class Solution {
    public String addBinary(String a, String b) {
        if(a == null || "".equals(a)) {
            return b;
        } else if(b == null || "".equals(b)) {
            return a;
        }
        int carry = 0;
        int ia = a.length()-1, ib = b.length()-1;
        StringBuilder sb = new StringBuilder();
        
        while(ia>=0 && ib>=0) {
            int n = a.charAt(ia--)-'0'+b.charAt(ib--)-'0'+carry;
            sb.append(n&1);
            carry = n>>1;
        }
        if(ia >= 0) {
        	carry = addRest(a, ia, sb, carry);
        }
        if(ib >= 0) {
        	carry = addRest(b, ib, sb, carry);        	
        }
        if(carry > 0) {
        	sb.append('1');
        }
        return sb.reverse().toString();
    }

	private int addRest(String s, int i, StringBuilder sb, int carry) {
		while(i >= 0) {
            int n = s.charAt(i--)-'0'+carry;
            sb.append(n&1);
            carry = n>>1;
        }
		return carry;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值