Add Binary Leetcode java
1715 ワード
タイトル:
Given two binary strings, return their sum (also a binary string).
For example, a =
問題:
バイナリ加算はいずれも最下位(右から左へ)から行われます.したがって、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 }
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(i
16
else
17 p = 0;
18
19
if(i
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 }