LintCode-408.二進(jìn)制求和

題目

描述

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

樣例

a = 11
b = 1
返回 100

解答

思路

  1. 字符串拆成字符數(shù)組,遍歷字符數(shù)組進(jìn)行計(jì)算,考慮到兩個(gè)字符串可能長(zhǎng)短不同,先算短的一截(進(jìn)位,兩個(gè)加數(shù)共三個(gè)參數(shù)),再算長(zhǎng)一點(diǎn)的字符串的剩余部分(進(jìn)位,一個(gè)加數(shù)共兩個(gè)參數(shù))。
  2. 抽離按位相加功能,返回參數(shù)中'1'的個(gè)數(shù)count,根據(jù)count進(jìn)行不同處理。
  3. 注意字符串,字符數(shù)組處理順序跟數(shù)字相加是反的,計(jì)算時(shí)要從右往左,存儲(chǔ)在緩存字符串中之后也要轉(zhuǎ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
        StringBuffer sb = new StringBuffer();
        char carry = '0';
        int count;
        char[] as = a.toCharArray();
        char[] bs = b.toCharArray();
        char[] longer = (as.length > bs.length) ? as : bs;
        int minLength = (as.length > bs.length) ? bs.length : as.length;
        for (int i = 0; i < minLength; i++){
            count = add(as[as.length - i - 1], bs[bs.length - i - 1], carry);
            if(count == 0) {carry = '0';sb.append('0');}
            else if(count == 1) {carry = '0';sb.append('1');}
            else if(count == 2) {carry = '1';sb.append('0');}
            else if(count == 3) {carry = '1';sb.append('1');}
            else return "0";
        }
        for(int j = minLength; j < longer.length; j++){
            count = add(longer[longer.length - j - 1], carry, '0');
            if(count == 0) {carry = '0';sb.append('0');}
            else if(count == 1) {carry = '0';sb.append('1');}
            else if(count == 2) {carry = '1';sb.append('0');}
            else return "0";
        }
        if(carry == '1') sb.append('1');
        return sb.reverse().toString();
    }
    public int add(char a, char b, char c){
        short count = 0;
        count += ((a == '0') ? 0 : 1);
        count += ((b == '0') ? 0 : 1);
        count += ((c == '0') ? 0 : 1);
        return count;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,675評(píng)論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,645評(píng)論 18 399
  • 藍(lán)綠小巨人閱讀 716評(píng)論 89 33
  • 是什么讓歲月不在 回憶不易 山水之間 如畫如夢(mèng) 人海茫茫 似識(shí)似霧 他日相逢 以何將賀 以深淚,以久默 別離之...
    Solong與你閱讀 172評(píng)論 0 1
  • 生活中充滿無常,愿每天平安健康開心
    靜水流光閱讀 177評(píng)論 0 0

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