1. 程式人生 > >【leetcode】67. Add Binary(Python & C++)

【leetcode】67. Add Binary(Python & C++)

67. Add Binary

題目連結

67.1 題目描述:

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

For example,

a = “11”
b = “1”
Return “100”.

67.2 解題思路:

  1. 思路一:二進位制相加的情況比較少,只有1、1和1、0和0、0,然後再加上是否進位就可以,所以可以直接列出所有情況,比較簡單,不再討論。

  2. 思路二:設定進位flag,同時也作為每次相加的和。然後迴圈,條件是flag==1或者兩個字串有一個沒有遍歷完成。然後每次flag+各字串當前座標下的值-‘0’;最後,將flag%2轉換為字元加到要返回的string前面,並且flag/2獲取下一次的進位值。最後迴圈結束,返回string。

67.3 C++程式碼:

1、思路一程式碼(3ms):

class Solution111 {
public:
    string addBinary(string a, string b) {
        string sum = "";
        int i = a.length() - 1;
        int j = b.length() - 1;
        int flag = 0;
        while (i>=0 && j>=0)
        {
            if (flag==1)
            {
                if
(a[i] == '1' && b[j] == '1') { sum.insert(0, 1, '1'); flag = 1; } else if (a[i] == '0' && b[j] == '0') { sum.insert(0, 1, '1'); flag = 0; } else
{ sum.insert(0, 1, '0'); flag = 1; } } else { if (a[i] == '1' && b[j] == '1') { sum.insert(0, 1, '0'); flag = 1; } else if (a[i] == '0' && b[j] == '0') { sum.insert(0, 1, '0'); flag = 0; } else { sum.insert(0, 1, '1'); flag = 0; } } i--; j--; } if (j==-1) { while (i>=0) { if (flag == 1 && a[i] == '1') { sum.insert(0, 1, '0'); flag = 1; } else if (flag == 0 && a[i] == '0') { sum.insert(0, 1, '0'); flag = 0; } else { sum.insert(0, 1, '1'); flag = 0; } i--; } } if (i == -1) { while (j >= 0) { if (flag == 1 && b[j] == '1') { sum.insert(0, 1, '0'); flag = 1; } else if (flag == 0 && b[j] == '0') { sum.insert(0, 1, '0'); flag = 0; } else { sum.insert(0, 1, '1'); flag = 0; } j--; } } if (flag==1) sum.insert(0, 1, '1'); return sum; } };

2、思路二程式碼(3ms):

class Solution111_1 {
public:
    string addBinary(string a, string b) {
        string sum = "";
        int flag = 0;
        int i = a.length() - 1;
        int j = b.length() - 1;
        while (flag==1 || i>=0 || j>=0)
        {
            if (i >= 0)
                flag = flag + a[i--] - '0';
            if (j >= 0)
                flag = flag + b[j--] - '0';
            sum = char(flag%2+'0') + sum;
            flag = flag / 2;
        }
        return sum;
    }
};

67.4 Python程式碼:

2、思路二程式碼(49ms)

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        sum=""
        flag=0
        i=len(a)-1
        j=len(b)-1
        while flag==1 or i>=0 or j>=0:
            if i>=0:
                flag=flag+ord(a[i])-ord('0')
                i-=1
            if j>=0:
                flag=flag+ord(b[j])-ord('0')
                j-=1
            sum=str(flag%2)+sum
            flag=flag/2
        return sum