LeetCode: Add Binary

108 篇文章 0 订阅

Problem

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) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        string strResult;
        int idxA = a.size() - 1;
        int idxB = b.size() - 1;
        int carry = 0;
        while(idxA >= 0 && idxB >= 0)
        {
            int sum = a[idxA] - '0' + b[idxB] - '0' + carry;
            if (sum == 3)
            {
                strResult.append("1");
                carry = true;
            }
            else if (sum == 2)
            {
                strResult.append("0");
                carry = true;
            }
            else if (sum == 1)
            {
                strResult.append("1");
                carry = false;
                
            }
            else
            {
                strResult.append("0");
                carry = false;
            }
            --idxA;
            --idxB;
        }
        
        if (idxA >=0)
        {
            while(idxA >= 0)
            {
                int sum = a[idxA] - '0' + carry;
                if (sum == 2)
                {
                    strResult.append("0");
                    carry = true;
                }
                else if (sum == 1)
                {
                    strResult.append("1");
                    carry = false;
                
                }
                else
                {
                    strResult.append("0");
                    carry = false;
                }
                --idxA;
            }
        }
        else
        {
             while(idxB >= 0)
            {
                int sum = b[idxB] - '0' + carry;
                if (sum == 2)
                {
                    strResult.append("0");
                    carry = true;
                }
                else if (sum == 1)
                {
                    strResult.append("1");
                    carry = false;
                
                }
                else
                {
                    strResult.append("0");
                    carry = false;
                }
                --idxB;
            }
        }
        
    	if (carry == 1)
            strResult.append("1");

        string result(strResult.rbegin(),strResult.rend());  
        return result;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值