[每日一题] 67. 二进制求和

链接: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()


    }
}
展示评论