1. 程式人生 > >LeetCode.67. 二進位制求和

LeetCode.67. 二進位制求和

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 1 和 0。

示例 1:

輸入: a = “11”, b = “1”
輸出: “100”

示例 2:

輸入: a = “1010”, b = “1011”
輸出: “10101”

分析:
本質就是一個字串的加法,注意的點有
1. 進位,包括如何確定上一位有進位,和如何確定該位要進位
2. 逆序,由於數學上最低位是從左邊開始,所以得先逆序計算,計算得到的結果再逆序回去

class Solution {
    public String addBinary(String a, String b) {
        String reverseA = new
StringBuffer(a).reverse().toString(); String reverseB = new StringBuffer(b).reverse().toString(); StringBuffer ans = new StringBuffer(); int lenA = a.length(); int lenB = b.length(); int carry = 0; for (int i = 0; i < (lenA < lenB ? lenB : lenA); i++) { int
t = carry; if (carry > 0) carry = 0; if (i < lenA) t += Integer.parseInt(reverseA.charAt(i) + ""); if (i < lenB) t += Integer.parseInt(reverseB.charAt(i) + ""); if (t > 1) { t -= 2
; carry = 1; } ans.append(t + ""); } if (carry > 0) ans.append("1"); return ans.reverse().toString(); } }