zoukankan      html  css  js  c++  java
  • Add Binary

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

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

     1 public class Solution {
     2     public String addBinary(String a, String b) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         StringBuffer sb = new StringBuffer();
     6         String l = null;
     7         String s = null;
     8         if(a == null && b == null) return null;
     9         else if(a == "" && b == "") return "";
    10         else if(a == "" && b.length() > 0) return b;
    11         else if(a.length() > 0 && b == "") return a;
    12         if(a.length() > b.length()){
    13             l = a;
    14             s = b;
    15         }else{
    16             l = b;
    17             s = a;
    18         }
    19         int j = s.length() - 1;
    20         int carry = 0;
    21         for(int i = l.length() - 1; i > -1; i --){
    22             char c = '0';
    23             if(j > -1){
    24                 int aa = l.charAt(i) - '0';
    25                 int bb = s.charAt(j --) - '0';
    26                 c += (aa + bb + carry) % 2;
    27                 carry = (aa + bb + carry) / 2;
    28             }else{
    29                 int aa = l.charAt(i) - '0';
    30                 c += (aa + carry) % 2;
    31                 carry = (aa + carry) / 2;
    32             }
    33             sb.insert(0,c);
    34         }
    35         if(carry == 1)
    36             sb.insert(0,"1");
    37         return sb.toString();
    38     }
    39 }

     第二遍:

    使用位运算: ^ 异或.

     1 public class Solution {
     2     public String addBinary(String a, String b) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         StringBuffer result = new StringBuffer();
     6         int carry = 0;
     7         for(int i = 1; i <= a.length() || i <= b.length(); i ++){
     8             int ac = 0, bc = 0;
     9             if(i <= a.length()) ac = a.charAt(a.length() - i) - '0';
    10             if(i <= b.length()) bc = b.charAt(b.length() - i) - '0';
    11             result.insert(0, ac ^ bc ^ carry);
    12             carry = (ac + bc + carry) > 1 ? 1 : 0;
    13         }
    14         if(carry > 0) result.insert(0, carry);
    15         return result.toString();
    16     }
    17 }
  • 相关阅读:
    kafka 配置属性
    mybatis 启动流程源码分析(二)之 Configuration-Properties解析
    mybatis 配置文件
    mybatis 启动流程源码分析(一)
    mybatis configuration
    使用函数式编程替换if-else
    mybatis 基本使用
    第十二周学习笔记
    T-SQL的进阶:超越基本级别3:构建相关子查询——701小组
    第十周学习笔记
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3349081.html
Copyright © 2011-2022 走看看