Leetcode-67 二进制求和
2021-10-30 本文已影响0人
itbird01
67. 二进制求和
解题思路
1.分析题意可知,其实就是实现从末尾遍历,逐位累加
2.两个字符串如果长度相等,则不用处理长度,如果两个字符串长度不等,则将短字符串前面补0
3.从末尾实现,逐位累加
1)0+0=0
2)1+0=0+1=1
3)1+1=10=0+向高一位的进位1
4)1+1+1=11=1+向高一位的进位1
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public String addBinary(String a, String b) {
// 分析题意可知,其实就是实现从末尾遍历,逐位累加
// 两个字符串如果长度相等,则不用处理长度,如果两个字符串长度不等,则将短字符串前面补0
StringBuilder builder = new StringBuilder();
if (a.length() > b.length()) {
for (int i = 0; i < a.length() - b.length(); i++) {
builder.append("0");
}
b = builder.toString() + b;
} else {
for (int i = 0; i < b.length() - a.length(); i++) {
builder.append("0");
}
a = builder.toString() + a;
}
// 从末尾实现,逐位累加
int add = 0;
StringBuilder res = new StringBuilder();
for (int i = a.length() - 1; i >= 0; i--) {
int ai = a.charAt(i) - '0';
int bi = b.charAt(i) - '0';
// 0+0=0
// 1+0=0+1=1
// 1+1=10=0+向高一位的进位1
// 1+1+1=11=1+向高一位的进位1
if (ai + bi + add == 0 || ai + bi + add == 1) {
res.append(ai + bi + add);
add = 0;
} else if (ai + bi + add == 2) {
res.append(0);
add = 1;
} else if (ai + bi + add == 3) {
res.append(1);
add = 1;
}
}
if (add != 0) {
res.append(add);
}
return res.reverse().toString();
}
}