题目
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。
总结一下
- 相当于高精度加法
- 去掉前导 0
- 输入与输出
输入: a = “11”, b = “10”
输出: “101”
思路
- 类似于 高精度加法
- 求得两个二进制数相加的结果后找到第一个不为 0 的书籍,遍历后面的集合输出即可
代码
class Solution {
public String addBinary(String a, String b) {
// 高精度加法
int[] nums1 = new int[a.length()];
int[] nums2 = new int[b.length()];
for (int i = 0; i < a.length(); i++) {
nums1[i] = a.charAt(i)-'0';
}
for (int i = 0; i < b.length(); i++) {
nums2[i] = b.charAt(i)-'0';
}
if (a.length() < b.length()) {
int[] tmp = nums1;
nums1 = nums2;
nums2 = tmp;
}
int i = nums1.length-1;
int j = nums2.length-1;
int[] res = new int[i+2];
int k = res.length-1;
int add = 0;
while (i >= 0 && j >= 0) {
if (nums1[i] + nums2[j] + add > 1) {
res[k] = (nums1[i] + nums2[j] + add) % 2;
add = (nums1[i] + nums2[j] + add) / 2;
}else {
res[k] = nums1[i] + nums2[j] + add;
add = 0;
}
i--;
j--;
k--;
}
while (i >= 0) {
if (nums1[i] + add > 1) {
res[k] = (nums1[i] + add) % 2;
add = (nums1[i] + add) / 2;
}else {
res[k] = nums1[i] + add;
add = 0;
}
i--;
k--;
}
if (add != 0) {
res[k] = 1;
}
// 找到结果
int index = 0;
String ans = "";
while (index < res.length) {
ans += res[index] + "";
index++;
}
index = ans.indexOf("1");
if (index == -1) {
ans = "0";
}else {
ans = ans.substring(index);
}
return ans;
}
}