[容易]408.二進制求和

我是小小強,這是我的第6篇原創(chuàng)文章,閱讀需要大約10分鐘。


題目

LintCode:二進制求和

描述

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

樣例

a = 11
b = 1
返回 100

思路

二進制相加,主要考慮進位的情況,每位在進行相加之后,要判斷之前有無進位的情況,如果有,本位要進行加1處理,同時還要考慮是否要再次向高位進位。相加結(jié)果的二進制串長度是有可能超過原數(shù)的。
最直接的方法將二進制串轉(zhuǎn)換為整數(shù),進行相加,然后將結(jié)果再轉(zhuǎn)換為二進制串。

實現(xiàn)

非遞歸實現(xiàn)

  1. java實現(xiàn)
public class Solution {
    /**
     * @param a a number
     * @param b a number
     * @return the result
     */
    public String addBinary(String a, String b) {
        // Write your code here
        if (a == null || b == null) {
            return null;
        }
        return parseInt2String(parseString2(a) + parseString2(b));
    }
    
     public static int parseString2(String str1){
        char c = 0;
        int sum = 0;
        for (int i = 0; i < str1.length(); i++) {
            if (str1.charAt(i) == '1'){
                sum += 1<<(str1.length()-1-i);
            }
        }
        return sum;
    }

    public static String parseInt2String(int a){
        String str = "";
        if (a == 0)
            return "0";
        while (a != 0){
            str += a % 2;
            a = a/2;
        }
        String str2 = "";
        int i = str.length();
        while (i > 0 ){
            str2+=str.charAt(i-1);
            i--;
        }
        return str2;
    }
}
  1. 結(jié)果分析
    結(jié)果:結(jié)果通過了LintCode的要求。
    分析:這種實現(xiàn)比較好理解,但是實現(xiàn)起來卻沒什么巧妙之處。

其它優(yōu)化參考

lintcode 二進制求和 給定兩個二進制字符串,返回他們的和
LIntCode-二進制求和
Short AC solution in Java with explanation

優(yōu)秀代碼

public class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1, j = b.length() -1, carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (j >= 0) sum += b.charAt(j--) - '0';
            if (i >= 0) sum += a.charAt(i--) - '0';
            sb.append(sum % 2);
            carry = sum / 2;
        }
        if (carry != 0) sb.append(carry);
        return sb.reverse().toString();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,927評論 0 33
  • 一、 1、請用Java寫一個冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨云閱讀 1,500評論 0 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,753評論 18 399
  • 第1章 第一個C程序第2章 C語言基礎(chǔ)第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設(shè)計第5章 條件結(jié)構(gòu)程序設(shè)計第6章...
    小獅子365閱讀 10,874評論 3 71
  • 老爸退休后養(yǎng)了許多花,草本的、木本的;賞根的、賞葉的,觀花的,林林總總,占據(jù)了我們家整個二樓和三樓。平日澆水...
    彤說閱讀 428評論 0 4

友情鏈接更多精彩內(nèi)容