leetcode[67. 二进制求和]
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
解题:
1两个字符串长度要保持一致,少掉的要用0补全
2字符串计算完后,字符串是倒着的,你要reverse翻转
代码:
public static String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int flag=0;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
int sum=flag;
sum += (i >= 0 ? a.charAt(i) - '0' : 0); //用charAt获得i位的值是字符,用ASCII码值-‘0’的ASCII码值得到一个整数
sum += (j >= 0 ? b.charAt(j) - '0' : 0);
sb.append(sum%2);//两个位置都是1 相加为2则进1变0
flag=sum/2;// 给下一位进1
}
sb.append(flag == 1 ? flag : "");
return sb.reverse().toString();
}
public static void main(String[] args) {
String a="11";
String b = "1";
String c = "1010";
String d = "1011";
System.out.println(addBinary(a, b));
System.out.println(addBinary(c, d));
}