-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy path67-moran991231.java
52 lines (47 loc) · 1010 Bytes
/
67-moran991231.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
public String addBinary(String a, String b) {
int len_a = a.length(), len_b = b.length();
char[] ret = new char[Math.max(len_a, len_b) + 1];
// swap
if (len_b > len_a) {
String temp = a;
a = b;
b = temp;
int temp_ = len_a;
len_a = len_b;
len_b = temp_;
}
int pa = len_a - 1, pb = len_b - 1, pr = ret.length - 1;
char ch_a, ch_b, carry = '0';
int sum;
for (; 0 <= pb; pa--, pb--, pr--) {
ch_a = a.charAt(pa);
ch_b = b.charAt(pb);
sum = ch_a + ch_b + carry - 2 * '0';
if (sum >= '2') {
ret[pr] = (char) (sum - 2);
carry = '1';
} else {
ret[pr] = (char) sum;
carry = '0';
}
}
for (; 0 <= pa; pa--, pr--) {
ch_a = a.charAt(pa);
sum = ch_a + carry - '0';
if (sum >= '2') {
ret[pr] = (char) (sum - 2);
carry = '1';
} else {
ret[pr] = (char) sum;
carry = '0';
}
}
ret[0] = carry;
if (ret[0] == '0') {
return new String(ret, 1, len_a);
}else {
return new String(ret);
}
}
}