这题代码我写的又长又臭,我自己都快看不下去了。。如果有人搜到这篇博客的话,我估计你是看不懂的。。
这傻逼网友写的什么垃圾
-------------------------------------------------------------------------------------------------------------------
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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(); }