leetcode刷题笔记六十七题 二进制求和

leetcode刷题笔记六十七题 二进制求和

源地址:67. 二进制求和

问题描述:

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

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

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

提示:

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

代码补充:

/**
本题较为简单 通过模拟10进制加法实现
从两个数组尾端向前依次获取元素,不存在的话置0
当前位置的数字为(a(i) + b(i) + carry)%2
当前位置的进位为(a(i) + b(i) + carry)/2
最后判断下遗留进位是否为1,若为1,则需要在首部添加1
*/
import scala.collection.mutable
object Solution {
    def addBinary(a: String, b: String): String = {  
        val maxLen = math.max(a.length, b.length)
        val arr = mutable.ArrayBuffer[Int]()
        var car = 0
        var tempA = 0
        var tempB = 0

        for(i <- 0 to maxLen-1){
            if(i < a.length)  tempA = a(a.length - 1 - i).toString.toInt 
            else  tempA = 0
            if(i < b.length)  tempB = b(b.length - 1 - i).toString.toInt 
            else  tempB = 0
            //println("i: " + i)
            //println("tempA: " + tempA)
            //println("tempB: " + tempB)
            val sum = tempA + tempB + car  
            (sum)%2 +=: arr
            car = (sum)/2  
        }
        if (car == 1) 1 +=: arr

        //println(arr.toArray.mkString)
        return arr.toArray.mkString
    }
}
原文地址:https://www.cnblogs.com/ganshuoos/p/13326792.html