1. 程式人生 > >408. Add Binary【LintCode java】

408. Add Binary【LintCode java】

進制 itl inline lin char for car title turn

Description

Given two binary strings, return their sum (also a binary string).

Example

a = 11

b = 1

Return 100

解題:二進制相加。我的思路是,先轉成StringBuilder對象(reverse方法比較好用),因為相加是從最後開始,所以先用reverse方法倒轉過來。和上一題類似,用carry變量表示進位,0為不進位,1為需要進一位。最後的結果再倒過來。具體細節標註在代碼中,代碼如下:

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 StringBuilder sa = new StringBuilder(a); StringBuilder sb = new StringBuilder(b); StringBuilder res = new StringBuilder();
int carry = 0;//表示進位 sa.reverse(); sb.reverse(); int i = 0; for(i = 0; i < sa.length() && i < sb.length(); i++){ int tpa = sa.charAt(i) - ‘0‘; int tpb = sb.charAt(i) - ‘0‘; if(carry == 0){ // 沒有進位 if(tpa == 1 && tpb == 1){ carry
= 1; res.append(‘0‘); }else{ char temp = (char)((int)‘0‘ + (tpa+tpb)); res.append( temp ); } }else{ //有進位; if(tpa + tpb == 1){ carry = 1; // 依然有進位 res.append(‘0‘); }else if( tpa + tpb == 2){ carry = 1; res.append(‘1‘); }else{ // 0 + 0 carry = 0; res.append(‘1‘); } } } //對剩下的處理 while(i < sa.length()){ //把sa後面的接上去,但是要考慮進位 if(carry == 0){ res.append(sa.substring(i)); break; }else{ //有進位 if(sa.charAt(i) == ‘1‘){ res.append(‘0‘); }else{ res.append(‘1‘); carry = 0; } i++; } } while(i < sb.length()){ //把sa後面的接上去,但是要考慮進位 if(carry == 0){ res.append(sb.substring(i)); break; }else{ //有進位 if(sb.charAt(i) == ‘1‘){ res.append(‘0‘); }else{ res.append(‘1‘); carry = 0; } i++; } } if(carry == 1) res.append(‘1‘); return res.reverse().toString(); } }

408. Add Binary【LintCode java】