LeetCode 剑指 Offer II 002. 二进制加法
题目描述
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "10"
输出: "101"
LeetCode 剑指 Offer II 002. 二进制加法
提示:
一、解题关键词
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public String addBinary(String a, String b) {
StringBuilder res = new StringBuilder(); // 返回结果
int i = a.length() - 1; // 标记遍历到 a 的位置
int j = b.length() - 1; // 标记遍历到 b 的位置
int carry = 0; // 进位
while (i >= 0 || j >= 0 || carry != 0) { // a 没遍历完,或 b 没遍历完,或进位不为 0
int digitA = i >= 0 ? a.charAt(i) - '0' : 0; // 当前 a 的取值
int digitB = j >= 0 ? b.charAt(j) - '0' : 0; // 当前 b 的取值
int sum = digitA + digitB + carry; // 当前位置相加的结果
carry = sum >= 2 ? 1 : 0; // 是否有进位
sum = sum >= 2 ? sum - 2 : sum; // 去除进位后留下的数字
res.append(sum); // 把去除进位后留下的数字拼接到结果中
i --; // 遍历到 a 的位置向左移动
j --; // 遍历到 b 的位置向左移动
}
return res.reverse().toString(); // 把结果反转并返回
}
}
2.知识点
本文详细介绍了LeetCode剑指OfferII002题的解决方案,即如何进行二进制字符串的加法运算。通过分析字符串的每一位,结合进位概念,给出了一种有效的时间复杂度为O(n)的算法实现,其中n为字符串长度。同时,代码示例展示了如何使用Java处理这个问题,将两个二进制字符串相加得到新的二进制字符串。
1134

被折叠的 条评论
为什么被折叠?



