给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。
解法:
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
| object AddBinary { def main(args: Array[String]): Unit = { println(addBinary("1111", "1111")) println(addBinary("1010", "1011")) println(addBinary("11", "1")) println(addBinary("11", "10001")) println(addBinary("101010", "100001")) }
def addBinary(a: String, b: String): String = { var i = a.length - 1 var j = b.length - 1
var cur = 0 val res = new StringBuilder
while (i >= 0 || j >= 0) { val newCur = (if (i >= 0) a.charAt(i) - '0' else 0) + (if (j >= 0) b.charAt(j) - '0' else 0) + cur res.append(newCur % 2) cur = newCur / 2 i -= 1 j -= 1 }
if (cur != 0) { res.append(cur) }
res.reverse.toString() } }
|