Always ke|

505donkey

园龄:6年3个月粉丝:6关注:0

2025-01-22 16:54阅读: 2评论: 0推荐: 0

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
}

本文作者:505donkey

本文链接:https://www.cnblogs.com/505donkey/p/18625331

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   505donkey  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起