Add Binary | leetcode 67 【Java解题报告】

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

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

 

public class Solution {  
    public static String addBinary(String a, String b) {  
        if(a.equals("")) return b;  
        if(b.equals("")) return a;<span style="white-space:pre">  </span>//如果b为空,则返回a   
        int al = a.length() - 1;    <span style="white-space:pre">    </span>//字符串a的长度减1,刚好指向数组的末尾   
        int bl = b.length() - 1;    
        int t = Math.max(al, bl) + 1;      
        char[] arr = new char[t+1]; <span style="white-space:pre">    </span>//设置要创建char数组的长度   
        int c = 0;  
        /*char[] str1 = a.toCharArray(); 
        char[] str2 = b.toCharArray();*/<span style="white-space:pre">    </span>//注释部分是将字符串放入数组中,这种方法以后再实现,如果读者有兴趣的话,可以自己尝试实现。   
        for(; al>=0 && bl>=0; al--, bl--, t--) {<span style="white-space:pre">  </span>//这里实现a1与b1的位相加   
            int s = a.charAt(al) + b.charAt(bl) + c - '0' - '0';  
            if(s==2) {  
                c = 1;  
                s = 0;  
            } else if(s == 3) {  
                c = 1;  
                s = 1;  
            }  
            else c = 0;  
            arr[t] = (char)(s+'0');  
        }  
        while (al >= 0) {<span style="white-space:pre">                </span>//若b字符串长度小于a长度,则继续   
            if(a.charAt(al) - '0' + c > 1) {  
                arr[t] = 0 + '0';  
                c = 1;  
            } else {  
                arr[t] = (char) (a.charAt(al) + c);  
                c = 0;  
            }  
            t--;  
            al--;  
        }  
        while (bl >= 0) {  
            if(b.charAt(bl) - '0' + c > 1) {  
                arr[t] = 0 + '0';  
                c = 1;  
            } else {  
                arr[t] = (char) (b.charAt(bl) + c);  
                c = 0;  
            }  
            t--;  
            bl--;  
        }  
        if(c == 1) arr[0] = 1+'0';  
        //将数组转化为字符串输出   
        return new String(arr).trim();  
    }  
}  

 

 1 public class Solution {  
 2     public static String addBinary(String a, String b) {  
 3         if(a.equals("")) return b;  
 4         if(b.equals("")) return a;<span style="white-space:pre">  </span>//如果b为空,则返回a   
 5         int al = a.length() - 1;    <span style="white-space:pre">    </span>//字符串a的长度减1,刚好指向数组的末尾   
 6         int bl = b.length() - 1;    
 7         int t = Math.max(al, bl) + 1;      
 8         char[] arr = new char[t+1]; <span style="white-space:pre">    </span>//设置要创建char数组的长度   
 9         int c = 0;  
10         /*char[] str1 = a.toCharArray(); 
11         char[] str2 = b.toCharArray();*/<span style="white-space:pre">    </span>//注释部分是将字符串放入数组中,这种方法以后再实现,如果读者有兴趣的话,可以自己尝试实现。   
12         for(; al>=0 && bl>=0; al--, bl--, t--) {<span style="white-space:pre">  </span>//这里实现a1与b1的位相加   
13             int s = a.charAt(al) + b.charAt(bl) + c - '0' - '0';  
14             if(s==2) {  
15                 c = 1;  
16                 s = 0;  
17             } else if(s == 3) {  
18                 c = 1;  
19                 s = 1;  
20             }  
21             else c = 0;  
22             arr[t] = (char)(s+'0');  
23         }  
24         while (al >= 0) {<span style="white-space:pre">                </span>//若b字符串长度小于a长度,则继续   
25             if(a.charAt(al) - '0' + c > 1) {  
26                 arr[t] = 0 + '0';  
27                 c = 1;  
28             } else {  
29                 arr[t] = (char) (a.charAt(al) + c);  
30                 c = 0;  
31             }  
32             t--;  
33             al--;  
34         }  
35         while (bl >= 0) {  
36             if(b.charAt(bl) - '0' + c > 1) {  
37                 arr[t] = 0 + '0';  
38                 c = 1;  
39             } else {  
40                 arr[t] = (char) (b.charAt(bl) + c);  
41                 c = 0;  
42             }  
43             t--;  
44             bl--;  
45         }  
46         if(c == 1) arr[0] = 1+'0';  
47         //将数组转化为字符串输出   
48         return new String(arr).trim();  
49     }  
50 }  
 1 public class Solution {  
 2     public static String addBinary(String a, String b) {  
 3         if(a.equals("")) return b;  
 4         if(b.equals("")) return a;<span style="white-space:pre">  </span>//如果b为空,则返回a   
 5         int al = a.length() - 1;    <span style="white-space:pre">    </span>//字符串a的长度减1,刚好指向数组的末尾   
 6         int bl = b.length() - 1;    
 7         int t = Math.max(al, bl) + 1;      
 8         char[] arr = new char[t+1]; <span style="white-space:pre">    </span>//设置要创建char数组的长度   
 9         int c = 0;  
10         /*char[] str1 = a.toCharArray(); 
11         char[] str2 = b.toCharArray();*/<span style="white-space:pre">    </span>//注释部分是将字符串放入数组中,这种方法以后再实现,如果读者有兴趣的话,可以自己尝试实现。   
12         for(; al>=0 && bl>=0; al--, bl--, t--) {<span style="white-space:pre">  </span>//这里实现a1与b1的位相加   
13             int s = a.charAt(al) + b.charAt(bl) + c - '0' - '0';  
14             if(s==2) {  
15                 c = 1;  
16                 s = 0;  
17             } else if(s == 3) {  
18                 c = 1;  
19                 s = 1;  
20             }  
21             else c = 0;  
22             arr[t] = (char)(s+'0');  
23         }  
24         while (al >= 0) {<span style="white-space:pre">                </span>//若b字符串长度小于a长度,则继续   
25             if(a.charAt(al) - '0' + c > 1) {  
26                 arr[t] = 0 + '0';  
27                 c = 1;  
28             } else {  
29                 arr[t] = (char) (a.charAt(al) + c);  
30                 c = 0;  
31             }  
32             t--;  
33             al--;  
34         }  
35         while (bl >= 0) {  
36             if(b.charAt(bl) - '0' + c > 1) {  
37                 arr[t] = 0 + '0';  
38                 c = 1;  
39             } else {  
40                 arr[t] = (char) (b.charAt(bl) + c);  
41                 c = 0;  
42             }  
43             t--;  
44             bl--;  
45         }  
46         if(c == 1) arr[0] = 1+'0';  
47         //将数组转化为字符串输出   
48         return new String(arr).trim();  
49     }  
50 }  

 

 

 

posted @ 2015-10-04 13:00  lovechara  阅读(163)  评论(0)    收藏  举报