LeetCode集錦(十六) - 第67題 Add Binary

問題

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

解題方法

  1. 按照咱們的思路來編輯,代碼以下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,而後反轉一下,比以前方式要快不少。翻譯

相關文章
相關標籤/搜索