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
}
}