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;
    }
}

 

posted @ 2019-09-09 09:52  stul  阅读(551)  评论(0编辑  收藏  举报