408. Add Binary【LintCode java】
阿新 • • 發佈:2018-07-16
進制 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】