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行太精妙了,赞赞赞