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.
1 2
| Input: a = "11", b = "1" Output: "100"
|
1 2
| Input: a = "1010", b = "1011" Output: "10101"
|
Solution
1 2 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
假設有以下參數:
說明:
1 2 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