Add Binary Leetcode java

1715 ワード

タイトル:
Given two binary strings, return their sum (also a binary string).
For example, a = "11" b = "1" Return "100" .
 
問題:
バイナリ加算はいずれも最下位(右から左へ)から行われます.したがって、2つの文字列に対して最後の1桁から加算し、長さが異なる場合は、短い文字列の高位を0に補う.
各ラウンドの計算にキャリーを加え、最後にループを飛び出した後、結果を更新するためにキャリーが1であるかどうかを堅持します.
 
コードは次のとおりです(from discussion):
 
 1 
public String addBinary(String a, String b) {
 2     
int m = a.length();
 3     
int n = b.length();
 4     
int carry = 0;
 5     String res = "";
 6     
//
 the final length of the result depends on the bigger length between a and b, 
 7 
    
//
 (also the value of carry, if carry = 1, add "1" at the head of result, otherwise)
 8 
    
int maxLen = Math.max(m, n);
 9     
for (
int i = 0; i < maxLen; i++) {
10         
//
 start from last char of a and b
11 
        
//
 notice that left side is int and right side is char
12 
        
//
 so we need to  minus the decimal value of '0'
13 
        
int p=0,q=0;
14         
if(i15             p = a.charAt(m-1-i) - '0';
16         
else
17             p = 0;
18         
19         
if(i20             q = b.charAt(n-1-i)-'0';
21         
else
22             q = 0;
23             
24         
int tmp = p + q + carry;
25         carry = tmp / 2;
26         res += tmp % 2;
27     }
28     
return (carry == 0) ? res : "1" + res;
29     }