【leetcode刷题笔记】Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".


 

题解:简单的二进制加法模拟。a,b的最后以为对齐开始进行加法,用carries保存进位,如果加完后最高位还有进位,那么要在结果的最前面加一个1。

代码如下:

 1 public class Solution {
 2     public String addBinary(String a, String b) {
 3         if(a == null || a.length() == 0)
 4             return b;
 5         if(b == null || b.length() == 0)
 6             return a;
 7         
 8         String s = new String();
 9         int carries = 0;
10         int a_kepeler = a.length()-1;
11         int b_kepeler = b.length()-1;
12         
13         while(a_kepeler >= 0 && b_kepeler >= 0){
14             int sum = carries + a.charAt(a_kepeler) - '0' + b.charAt(b_kepeler) - '0';
15             carries = sum / 2;
16             sum = sum % 2;
17             s = String.valueOf(sum) + s;
18             a_kepeler--;
19             b_kepeler--;
20         }
21         
22         while(a_kepeler >= 0){
23             int sum = carries + a.charAt(a_kepeler) - '0';
24             carries = sum / 2;
25             sum = sum % 2;
26             s = String.valueOf(sum) + s;
27             a_kepeler--;
28         }
29         
30         while(b_kepeler >= 0){
31             int sum = carries + b.charAt(b_kepeler) - '0';
32             carries = sum / 2;
33             sum = sum % 2;
34             s = String.valueOf(sum) + s;
35             b_kepeler--;
36         }
37         
38         if(carries > 0)
39             s = "1" + s;
40         
41         return s;
42     }
43 }

上述代码还可以优化,就是如果a的长度小于b,就把a,b交换,使得a总是较长的那个,那么就可以省略第30~36行的while循环了。

posted @ 2014-07-22 11:34  SunshineAtNoon  阅读(180)  评论(0编辑  收藏  举报