• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
neverlandly
博客园    首页    新随笔    联系   管理    订阅  订阅

Leetcode: Add Binary

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

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

 我自己的做法:用StringBuffer, a和b都从末尾扫描到开头,而StringBuffer则是每次存在开头。循环则是只要aindex>=0 or bindext>=0 or carry>0就继续。加法则是分成3部分,依次判断aindex, bindex, carry是否满足加的条件,满足就加。这样写结构非常清晰。可以作为这类题的解题模板

 1 public class Solution {
 2     public String addBinary(String a, String b) {
 3         if (a==null || a.length()==0) return b;
 4         if (b==null || b.length()==0) return a;
 5         StringBuffer res = new StringBuffer();
 6         int aindex = a.length() - 1;
 7         int bindex = b.length() - 1;
 8         int digit = 0;
 9         int carry = 0;
10         while (aindex>=0 || bindex>=0 || carry>0) {
11             int result = 0;
12             if (aindex >= 0) {
13                 result += (int)(a.charAt(aindex) - '0');
14                 aindex--;
15             }
16             if (bindex >= 0) {
17                 result += (int)(b.charAt(bindex) - '0');
18                 bindex--;
19             }
20             if (carry > 0) {
21                 result += carry;
22             }
23             digit = result % 2;
24             carry = result / 2;
25             res.insert(0, digit);
26         }
27         return res.toString();
28     }
29 }

 别人的代码,用StringBuffer,差不多

 1 public String addBinary(String a, String b) {
 2     if(a==null || a.length()==0)
 3         return b;
 4     if(b==null || b.length()==0)
 5         return a;
 6     int i=a.length()-1;
 7     int j=b.length()-1;
 8     int carry = 0;
 9     StringBuilder res = new StringBuilder();
10     while(i>=0&&j>=0)
11     {
12         int digit = (int)(a.charAt(i)-'0'+b.charAt(j)-'0')+carry;
13         carry = digit/2;
14         digit %= 2;
15         res.append(digit);
16         i--;
17         j--;
18     }
19     while(i>=0)
20     {
21         int digit = (int)(a.charAt(i)-'0')+carry;
22         carry = digit/2;
23         digit %= 2;
24         res.append(digit);
25         i--;
26     }
27     while(j>=0)
28     {
29         int digit = (int)(b.charAt(j)-'0')+carry;
30         carry = digit/2;
31         digit %= 2;
32         res.append(digit);
33         j--;
34     }      
35     if(carry>0)
36     {
37         res.append(carry);
38     }
39     return res.reverse().toString();
40 }

 

posted @ 2014-05-14 11:26  neverlandly  阅读(235)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3