zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    wordpress默认css样式class和id集合
    wordpress导航当前页面菜单高亮显示如何操作
    用wpjam插件的朋友记得勾选移除工具栏
    get_template_part()调用自定义模板|wordpress函数
    删除WordPress菜单wp-nav-menu中li的class或id样式
    一行代码搞定WordPress面包屑导航breadcrumb
    wordpress非管理员看不到数据需有manage_options权限
    opencart中文版checkout设置city和county为非必选
    在VS中添加lib库的三种方法
    c++中vector的用法详解
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/3727358.html
Copyright © 2011-2022 走看看