链接:Leetcode
难度等级:Easy
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
思路:这里采用了模拟数字按位累加的做法,“逢二进一“。把累加的结果放到StringBuilder中,最后倒置一次(因为累加是从个位加起的)。
ps:这里有点坑的是一开始误以为kotlin的Char类型的toInt()(已被废弃,使用code属性替代)方法可以直接把字符转换为数字,其实这样直接转换得到的是该数字对应的ASCII码。需要先把Char转换为String再toInt()。
class Solution {
fun addBinary(a: String, b: String): String {
var posA = a.length - 1
var posB = b.length - 1
var carry = 0
val sb = StringBuilder()
while (posA >= 0 || posB >= 0 || carry > 0) {
var a = if (posA >= 0) a[posA--].toString().toInt() else 0
var b = if (posB >= 0 ) b[posB--].toString().toInt() else 0
var sum = a + b+ carry
val realSum = if (sum == 2) {
carry = 1
0
} else if(sum == 3) {
carry = 1
1
} else {
carry = 0
sum
}
sb.append(realSum)
}
return sb.toString().reversed()
}
}