1.题目
给你两个二进制字符串 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” ,就不含前导零
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary
2.思路
(1)调用 API
先将 a 和 b 转化成十进制数,求和后再转化为二进制数,这里可以使用 Java 自带的 API 来实现,但是在 Java 中:
- 如果字符串超过 33 位,不能转化为 Integer;
- 如果字符串超过 65 位,不能转化为 Long;
- 如果字符串超过 500000001 位,不能转化为 BigInteger;
因此,该思路的适用性不强,这一点需要注意。
(2)模拟
本题可以使用模拟的方式来进行二进制求和,具体步骤与415.字符串相加这题十分相似,只不过进制由十进制变为了二进制。文章来源:https://www.toymoban.com/news/detail-487071.html
相关题目:
LeetCode_字符串_简单_415.字符串相加文章来源地址https://www.toymoban.com/news/detail-487071.html
3.代码实现(Java)
//思路1————调用 API
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}
//思路2————模拟
class Solution {
public String addBinary(String a, String b) {
StringBuilder res = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
//进位
int carry = 0;
while (i >= 0 || j >= 0 || carry != 0) {
int x = (i >= 0) ? a.charAt(i) - '0' : 0;
int y = (j >= 0) ? b.charAt(j) - '0' : 0;
int val = x + y + carry;
res.append(val % 2);
carry = val / 2;
i--;
j--;
}
return res.reverse().toString();
}
}
到了这里,关于LeetCode_字符串_简单_67.二进制求和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!