Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
自己的代码
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
|
public
class
Solution {
public
static
String addBinary(String a, String b) {
//计算字符串a,b的长度
int
a_len = a.length();
int
b_len = b.length();
//程序默认a_len不小于b_len,如果a_len<b_len,则调换两个字符串
if
(a_len < b_len){
String c = a;
a = b;
b = c;
int
tmp_len = a_len;
a_len = b_len;
b_len = tmp_len;
}
//新建一个数组,用来存放两个二进制数的和,长度比a_len大1
int
[] sum =
new
int
[a_len+
1
];
int
add_value1;
int
add_value2;
int
jinwei =
0
;
//分别倒序取出字符串a,b的数,然后相加,算出进位
for
(
int
i=a_len-
1
,j=b_len-
1
;i>=
0
&&j>=
0
;i--,j--){
add_value1 = Integer.parseInt(String.valueOf(a.charAt(i)));
add_value2 = Integer.parseInt(String.valueOf(b.charAt(j)));
sum[i+
1
] = (add_value1 + add_value2 + jinwei)%
2
;
jinwei = (add_value1 + add_value2 + jinwei)/
2
;
}
//计算剩下的a_len-b_len个数与进位的和
for
(
int
k=a_len-b_len;k>=
0
;k--){
if
(k>
0
){
sum[k] = Integer.parseInt(String.valueOf(a.charAt(k-
1
)));
}
add_value1 = sum[k];
sum[k] = (add_value1 + jinwei)%
2
;
jinwei = (add_value1 + jinwei)/
2
;
}
//将得出的和,写入StringBuffer
StringBuffer sb =
new
StringBuffer();
for
(
int
n=
0
; n<a_len+
1
; n++){
//如果首部出现连续的两个0,则直接返回0;如果首部只出现一个0,则直接进行下一次循环
if
(n==
0
&&sum[n]==
0
){
if
(sum[
1
]==
0
){
return
String.valueOf(
0
);
}
continue
;
}
sb.append(sum[n]);
}
//将StringBuffer中的和转换成字符串输出
return
sb.toString();
}
}
|
别人的代码:
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
|
public
class
Solution {
public
static
String addBinary(String a, String b) {
int
i = a.length() -
1
;
// i指向a的末尾
int
j = b.length() -
1
;
// j指向b的末尾
int
c =
0
;
// carry 进位
// 先把String转为char数组便于处理
char
[] achar = a.toCharArray();
char
[] bchar = b.toCharArray();
// 结果数组
char
[] reschar =
new
char
[Math.max(achar.length, bchar.length)+
1
];
int
k =
0
;
// k指向结果数组的开头
while
(
true
){
if
(i<
0
&& j<
0
&& c==
0
){
break
;
}
int
aint =
0
;
int
bint =
0
;
if
(i >=
0
){
aint = achar[i] -
'0'
;
}
if
(j >=
0
){
bint = bchar[j] -
'0'
;
}
if
(aint + bint + c >
1
){
reschar[k] = (
char
) (
'0'
+ aint + bint + c -
2
);
c =
1
;
}
else
{
reschar[k] = (
char
) (
'0'
+ aint + bint + c);
c =
0
;
}
k++;
i--;
j--;
}
// char数组转string,然后翻转
return
new
StringBuffer(
new
String(reschar,
0
, k)).reverse().toString();
}
}
|
第13行太精妙了,赞赞赞