这题代码我写的又长又臭,我自己都快看不下去了。。如果有人搜到这篇博客的话,我估计你是看不懂的。。
这傻逼网友写的什么垃圾
-------------------------------------------------------------------------------------------------------------------
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
---------------------------------------------------------------------------------------------------------------------------
public static String addBinary(String a, String b) {
char[] longarr = a.toCharArray();
char[] smallarr = b.toCharArray();
//给定 字符串差,和最长的字符串的长度的初值
int cha = 0;
StringBuilder sb = new StringBuilder();
int count = 0;
int j = longarr.length;
if (a.length() != b.length()) { //当两个字符串长度不一样的时候,进行改变
j = (a.length() > b.length()) ? b.length() : a.length();
cha = Math.abs(a.length() - b.length());
longarr = (a.length() > b.length()) ? a.toCharArray() : b.toCharArray();
smallarr=(a.length() > b.length()) ? b.toCharArray() : a.toCharArray();
}
for (int i = j - 1; i >= 0; i--) {
if (longarr[cha + i] == '1' && smallarr[i] == '1') { //当字符串都是1的时候
if (count == 0) { //count是存储进位的1,
sb.append(0 + count);
count++;
} else { //当count=1,且字符串两位都是1的时候, count值继续为1;
sb.append(0 + count);
}
} else if (longarr[cha + i] == '0' && smallarr[i] == '0') {
sb.append(0 + count);
count = 0;
} else { //这里是 字符串一位是0一位是1的时候
if (count == 1) {
sb.append(1 - count);
count = 1;
} else {
sb.append(1);
}
}
}//上面只处理了长字符串 的后几位字符
if (cha != 0) { //这段是开始处理长的字符串 还未处理完毕的部分
for (int i = cha - 1; i >= 0; i--) {
if (longarr[i] == '0') {
sb.append(0 + count);
count = 0;
} else {
if (count == 1) {
sb.append(1 - count);
count = 1;
} else {
sb.append(1);
}
}
}
}
if (count == 1) { //如果到最后还有count=1
sb.append(1);
}
sb.reverse();//反转
return sb.toString();
}