1, 题目

给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

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

示例 2:

  1. 输入: a = "1010", b = "1011"
  2. 输出: "10101"

提示:

  1. 每个字符串仅由字符 '0' '1' 组成。
  2. 1 <= a.length, b.length <= 10^4
  3. 字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2, 算法

  1. #scala
  2. object Solution {
  3. def addBinary(a: String, b: String): String = {
  4. val c = a.reverse.zipAll(b.reverse, '0', '0').map(x => (x._1 - '0', x._2 - '0'))
  5. val buffer = scala.collection.mutable.Stack[Int]()
  6. var carry = 0
  7. var sum = 0
  8. for ((x, y) <- c) {
  9. sum = carry + x + y
  10. buffer.push(sum % 2)
  11. carry = sum / 2
  12. }
  13. if (carry == 1) {
  14. buffer.push(1)
  15. }
  16. buffer.toArray.mkString("")
  17. }
  18. }
  1. #python
  2. class Solution:
  3. def addBinary(self, a: str, b: str) -> str:
  4. import itertools
  5. c = itertools.zip_longest(reversed(a), reversed(b), fillvalue='0')
  6. carry = 0
  7. result = []
  8. for x, y in c:
  9. sum = carry + int(x) + int(y)
  10. result.append(sum % 2)
  11. carry = sum // 2
  12. if carry:
  13. result.append(1)
  14. result = reversed(result)
  15. result = map(str, result)
  16. return ''.join(result)