LeetCode OJ:Add Binary(二进制相加)

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

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

简单的二进制相加而已,只不过传入的参数是字符串而已。为了方便,先将string  reverse了一下,代码如下:

 1 class Solution {
 2 public:
 3     string addBinary(string a, string b) {
 4         reverse(a.begin(), a.end());
 5         reverse(b.begin(), b.end());
 6         int len1 = a.length();
 7         int len2 = b.length();
 8         string result;
 9         int flag ,val;
10         flag = val = 0;
11         int i;
12         for(i = 0; i < len1 && i < len2; ++i){
13             val = (a[i] - '0') + (b[i] - '0') + flag;
14             result.append(1, val % 2 + '0');
15             flag = val/2;
16         }
17         while (i < len1) {
18             val = a[i] - '0'+ flag;
19             result.append(1, val % 2 + '0');
20             flag = val/2;
21             ++i;
22         }
23         while (i < len2 ){
24             val = b[i] - '0'+ flag;
25             result.append(1, val % 2 + '0');
26             flag = val/2;
27             ++i;
28         }
29         cout << "flag " << flag << endl;
30         if(flag != 0)
31             result.append(1, '1');
32         reverse(result.begin(), result.end());
33         return result;
34     }
35 };

 java:以前的循环用的好蠢啊,居然用了三次循环,下面的java稍微有些改进:

 1 public class Solution {
 2     public String addBinary(String a, String b) {
 3         int len1 = a.length();
 4         int len2 = b.length();
 5         String ret = new String();
 6         int i = 0;
 7         int carry = 0;
 8         a = ReverseStr(a);
 9         b = ReverseStr(b);
10         while(i < len1 || i < len2 || carry != 0){
11             int val = ((i<len1)?(a.charAt(i)-'0'):0) + ((i<len2)?(b.charAt(i)-'0'):0) + carry;
12             carry = 0;
13             if(val > 1){
14                 carry = val/2;
15                 ret += (char)((val%2) + '0');
16             }else{
17                 ret += (char)(val + '0');
18             }
19             i++;
20         }
21         return ReverseStr(ret);
22     }
23 
24        public String ReverseStr(String str){
25         return new StringBuffer(str).reverse().toString();
26     }
27 }

 

posted @ 2015-10-11 22:17  eversliver  阅读(278)  评论(0)    收藏  举报