LeetCode 二进制加法 java
思路:
二进制加法用手算,然后用代码实现。
手算的时候,逢 2 进 1 。
用代码实现的时候,一开始会想到将长短不一的字符串对齐。 其实没必要。
找到字符串的长度,长度减 1 。 就是这个字符串的末尾, 然后从末尾开始相加。逢 2 进 1。 相加并不仅仅是两个字符相加,还有进位的相加。
进位 : 进位用一个变量表示。
每次的和用一个变量表示。
把每次的和放进 StringBuilder 变量里面。 最后反转 转化成 String 。 就是答案。
class Solution {
public String addBinary(String a, String b) {
char []a1 = a.toCharArray();
char []b1 = b.toCharArray();
int i = a1.length-1;
int j = b1.length-1;
int carry = 0;
StringBuilder ans = new StringBuilder();
while(i >= 0 || j >= 0 || carry != 0) {
// System.out.println("i:" + i + " j:" + j +" a[i]: " + a1[i] + " b[j]: " + b1[j]);
int aa = i >=0 ? a1[i--] - '0': 0;
int bb = j >=0 ? b1[j--] - '0': 0;
int sum = (aa + bb + carry)%2;
carry = (aa + bb + carry)/2;
// System.out.println("aa: " + aa + " bb:" + bb + " sum:" + sum + " carry:" + carry);
ans.append(sum);
}
String ansStr = ans.reverse().toString();
return ansStr;
}
}

浙公网安备 33010602011771号