Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
複製代碼
給定兩個二進制字符串,返回它們的和(也是一個二進制字符串)。 輸入字符串都是非空的,而且只包含字符1或0。 示例1: 輸入:a = "11", b = "1" 輸出:「100」 示例2: 輸入:a = "1010", b = "1011" 輸出:「10101」數組
本題是用字符串模擬2精製的加法,就按照逢2進1的方式遍歷一遍,若是長度不一樣,則在把長的覆蓋上去。bash
按照咱們的思路來編輯,代碼以下app
if (a == null || b == null) {
return a == null ? b : a;
}
StringBuilder stringBuilder = new StringBuilder();
int lenA = a.length() - 1;
int lenB = b.length() - 1;
int add = 0;
while (lenA >= 0 || lenB >= 0 || add > 0) {
int result = (lenA >= 0 ? a.charAt(lenA) - '0' : 0) + (lenB >= 0 ? b.charAt(lenB) - '0' : 0) + add;
add = result / 2;
stringBuilder.append(result % 2);
lenA--;
lenB--;
}
return stringBuilder.reverse().toString();
複製代碼
時間複雜度: 該方案用了循環m因此f(n)=(n)=n;因此O(f(n))=O(n),即T(n)=O(n)ui
空間複雜度: 該方案使用了沒有使用額外空間,因此空間複雜度是O(n)=O(1);spa
本題的大體解法如上所訴, 以前用StringBuilder的insert方法,發現速度很慢,看了下源碼後,它都會移動數組,也就是正常的數組擴容拷貝,因此特別慢,再次就直接用append,而後反轉一下,比以前方式要快不少。翻譯