Description
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
| 12
 
 | Input: a = "11", b = "1"Output: "100"
 
 | 
| 12
 
 | Input: a = "1010", b = "1011"Output: "10101"
 
 | 
Solution
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | func addBinary(a string, b string) string {
 la := len(a) - 1
 
 lb := len(b) - 1
 
 
 temp := 0
 
 carry := 0
 
 result := ""
 
 
 for la >= 0 || lb >= 0 || carry != 0 {
 
 temp = carry
 
 if la >= 0 {
 
 temp += int(a[la] - byte('0'))
 la--
 }
 
 if lb >= 0 {
 
 temp += int(b[lb] - byte('0'))
 lb--
 }
 
 
 result = string(temp%2+'0') + result
 
 
 carry = temp / 2
 }
 
 return result
 }
 
 | 
Note
假設有以下參數:
說明:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | 第 1 次迴圈:
 temp 為 0,加上 a 的 0,再加上 b 的 1,累計值為 1。
 
 result 為 "" 加 "1"。carry 為 0,不需進位。
 
 第 2 次迴圈:
 
 temp 為 0,加上 a 的 1,再加上 b 的 1,累計值為 2。
 
 result 為 "0" 加 "1"。carry 為 1,需要進位。
 
 第 3 次迴圈:
 
 temp 為 1,加上 a 的 0,再加上 b 的 0,累計值為 1。
 
 result 為 "1" 加 "01"。carry 為 0,不需進位。
 
 第 4 次迴圈:
 
 temp 為 0,加上 a 的 1,再加上 b 的 1,累計值為 2。
 
 result 為 "0" 加 "101"。carry 為 1,需要進位。
 
 第 5 次迴圈:
 
 temp 為 1,a 不跑迴圈,b 不跑迴圈,累計值為 1。
 
 result 為 "1" 加 "0101"。carry 為 0,不需進位。
 
 最終返回:"10101"
 
 | 
Code