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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理