Lintcode:二进制求和

问题:

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

样例:

样例 1:

输入:
a = "0", b = "0"
输出:
"0"

样例 2:

输入:
a = "11", b = "1"
输出:
"100"

python:

class Solution:
    """
    @param a: a number
    @param b: a number
    @return: the result
    """
    def addBinary(self, a, b):
        # write your code here
        if a == None:
            return b
        if b == None:
            return a
        A = []
        B = []
        result = []
        resultString = ""
        flag = 0
        for i in range(len(a)):
            A.append(int(a[i]))
        for j in range(len(b)):
            B.append(int(b[j]))
        maxLen = max(len(A), len(B))
        for k in range(-1, -1*(maxLen+1), -1):
            if(-1*k <= len(A) and -1*k <= len(B)):
                result.insert(0, (A[k]+B[k]+flag)%2)
                flag = (A[k]+B[k]+flag) // 2
                continue
            if(-1*k > len(B)):
                result.insert(0, (A[k]+flag)%2)
                flag = (A[k]+flag) // 2
                continue
            if(-1*k > len(A)):
                result.insert(0, (B[k]+flag)%2)
                flag = (B[k]+flag) // 2
                continue
        if flag == 1:
            result.insert(0, 1)
        for m in range(len(result)):
            resultString += str(result[m])
        return resultString

C++:

class Solution {
public:
    /**
     * @param a: a number
     * @param b: a number
     * @return: the result
     */
    string addBinary(string &a, string &b) {
        // write your code here
        stack<int> A;
        stack<int> B;
        stack<int> result;
        string resultString = "";
        int flag = 0;
        for(int i = 0; i < a.size(); i++)
        {
            A.push(int(a[i]-'0'));
        }
        for(int j = 0; j < b.size(); j++)
        {
            B.push(int(b[j]-'0'));
        }
        int maxSize = max(A.size(),B.size());
        for(int k = 0; k < maxSize; k++)
        {
            if((!A.empty()) && (!B.empty()))
            {
                result.push((A.top()+B.top()+flag)%2);
                flag = (A.top() + B.top() + flag) / 2;
                A.pop();
                B.pop();
                continue;
            }
            if(B.empty())
            {
                result.push((A.top() + flag)%2);
                flag = (A.top() + flag) / 2;
                A.pop();
                continue;
            }
            if(A.empty())
            {
                result.push((B.top() + flag)%2);
                flag = (B.top() + flag) / 2;
                B.pop();
                continue;
            }
        }
        if(flag == 1)
        {
            result.push(1);
        }
        while(!result.empty())
        {
            resultString += to_string(result.top());
            result.pop();
        }
        return resultString;
    }
};

 

PS:这个题可以走捷径,先换成十进制再换成二进制

python:

class Solution:
    """
    @param a: a number
    @param b: a number
    @return: the result
    """
    def addBinary(self, a, b):
        # write your code here
        if a == None:
            return b
        if b == None:
            return a
        A = int(a, 2)
        B = int(b, 2)
        SUM = A + B
        result = bin(SUM)[2:]
        return result

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值