[Leetcode] 67. 二進位制求和
阿新 • • 發佈:2018-12-24
題目描述:
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1
和 0
。
示例 1:
輸入: a = "11", b = "1" 輸出: "100"
示例 2:
輸入: a = "1010", b = "1011" 輸出: "10101"
解題思路:
這個題目沒啥好說的了,就是普通人腦子裡最正常的思路,跟前面的連結串列求和的一樣,設定個進位標誌位就行啦。雖然程式碼看上去挺長的,但是思路很簡答,就需要注意一些細節的東西就行了。
程式碼實現(Java語言):
class Solution { public String addBinary(String a, String b) { int i = a.length()-1,j = b.length()-1; int max = Math.max(i,j); char[] res = new char[max+2]; int len = max + 1; char[] aa = a.toCharArray(); char[] bb = b.toCharArray(); int carry = 0; while(i>=0&&j>=0){ if(aa[i] == '1' && bb[j] == '1'){ res[len--] = carry==0?'0':'1'; carry = 1; }else if(aa[i] == '0' && bb[j] == '0'){ res[len--] = carry==0?'0':'1'; carry = 0; }else{ if(carry == 1){ res[len--] = '0'; carry = 1; }else{ res[len--] = '1'; carry = 0; } } i--; j--; } while(i >= 0){ if(carry == 0){ res[len--] = aa[i]; }else{ if(aa[i] == '1'){ res[len--] = '0'; carry = 1; }else{ res[len--] = '1'; carry = 0; } } i--; } while(j >= 0){ if(carry == 0){ res[len--] = bb[j]; }else{ if(bb[j] == '1'){ res[len--] = '0'; carry = 1; }else{ res[len--] = '1'; carry = 0; } } j--; } if(carry == 1){ res[len--] = '1'; }else{ res[len--] = ' '; } return new String(res).trim(); } }