leetcode-67 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

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

示例 2:

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

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

go实现:

func addBinary(a string, b string) string {

	// 定义返回结果,初始值为空
	result := ""
	// 定义过程变量,用于保存a、b相加过程中的进位,初始值为0,表示暂无进位
	carry := 0
	// 定义a、b遍历索引,初始值分别为a、b末位字符位置,表示从右往左进行计算,即低位向高位进行相加
	i, j := len(a)-1, len(b)-1

	// 进行求和计算
	for i >= 0 || j >= 0 || carry > 0 {

		// i不小于0时,表示a当前位有值,赋值给变量carry后左移1位(此处int函数实际结果为ASK11值,故通过减'0'获取转化后整数值)
		if i >= 0 {
			carry += int(a[i] - '0')
			i--
		}

		// j不小于0时,表示b当前位有值,赋值给变量carry后左移1位
		if j >= 0 {
			carry += int(b[j] - '0')
			j--
		}

		// 计算当前位累积和,其中 carry%2 为当前位相加结果值,即进位值,结果以字符串追加形式体现
		result = fmt.Sprintf("%d%s", carry%2, result)
		// 进行进位计算后,更新当前进位值
		carry /= 2
	}

	// 返回最终计算结果
	return result
}
posted @ 2025-01-22 16:54  505donkey  阅读(20)  评论(0)    收藏  举报