LeetCode 67 — Add Binary(C++ Java Python)

来源:互联网 发布:虎头软件是什么 编辑:程序博客网 时间:2024/05/29 17:42

题目:http://oj.leetcode.com/problems/add-binary/

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

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

题目翻译:

给定两个二进制字符串,返回它们的和(也是一个二进制字符串)。
例如,
a = "11"
b = "1"
返回"100"。

分析:

        注意细节。

C++实现:

class Solution {public:    string addBinary(string a, string b) {    string str1;    string str2;    if(a.length() >= b.length())    {    str1 = a;    str2 = b;    }    else    {    str1 = b;    str2 = a;    }    int m = str1.length();    int n = str2.length();    char sum[m + 1];    sum[m] = '\0';    int i = m - 1;    char carry = '0';    --m;    --n;    while(n >= 0)    {    if(str1[m] == '0' && str2[n] == '0')    {    sum[i] = carry;    carry = '0';    }    else if(str1[m] == '1' && str2[n] == '1')    {   sum[i] = carry;   carry = '1';    }    else    {    if(carry == '0')    {    sum[i] = '1';    }    else    {    sum[i] = '0';    }    }    --m;    --n;    --i;    }    while(m >= 0)    {    if(str1[m] == '1')    {    if(carry == '0')    {    sum[i] = '1';    }    else    {    sum[i] = '0';    }    }    else    {    sum[i] = carry;    carry = '0';    }    --m;    --i;    }    string result = sum;    if(carry == '1')    {    return "1" + result;    }    return result;    }};

Java实现:

public class Solution {    public String addBinary(String a, String b) {char[] str1;char[] str2;if (a.length() >= b.length()) {str1 = a.toCharArray();str2 = b.toCharArray();} else {str1 = b.toCharArray();str2 = a.toCharArray();}int m = str1.length;int n = str2.length;char[] sum = new char[m];int i = m - 1;char carry = '0';--m;--n;while (n >= 0) {if (str1[m] == '0' && str2[n] == '0') {sum[i] = carry;carry = '0';} else if (str1[m] == '1' && str2[n] == '1') {sum[i] = carry;carry = '1';} else {if (carry == '1') {sum[i] = '0';} else {sum[i] = '1';}}--m;--n;--i;}while (m >= 0) {if (str1[m] == '1') {if (carry == '1') {sum[i] = '0';} else {sum[i] = '1';}} else {sum[i] = carry;carry = '0';}--m;--i;}String result = new String(sum);if (carry == '1') {return "1" + result;} return result;    }}

Python实现:

class Solution:    # @param a, a string    # @param b, a string    # @return a string    def addBinary(self, a, b):        if(len(a) >= len(b)):            str1 = a            str2 = b        else:            str1 = b            str2 = a                m = len(str1)        n = len(str2)                sum = ['0' for i in range(m)]                i = m - 1        carry = '0'                    m -= 1        n -= 1                while n >= 0:            if str1[m] == '0' and str2[n] == '0':                sum[i] = carry                carry = '0'            elif str1[m] == '1' and str2[n] == '1':                sum[i] = carry                carry = '1'            else:                if carry == '0':                    sum[i] = '1'                else:                    sum[i] = '0'  # not needed                                m -= 1            n -= 1            i -= 1                while m >= 0:            if str1[m] == '0':                sum[i] = carry                carry = '0'            else:                if carry == '0':                    sum[i] = '1'                else:                    sum[i] = '0'  # not needed                                m -= 1            i -= 1                    if carry == '1':            return "1" + "".join(sum)                return "".join(sum)

        感谢阅读,欢迎评论!

0 0