67.二进制求和

时间:2022-06-13 20:59:12

这题代码我写的又长又臭,我自己都快看不下去了。。如果有人搜到这篇博客的话,我估计你是看不懂的。。

这傻逼网友写的什么垃圾67.二进制求和

-------------------------------------------------------------------------------------------------------------------

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 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();
	}