67. 二进制求和

原创 2018年04月17日 19:05:59

一、题意
给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入: a = “11”, b = “1”
输出: “100”
示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

二、分析和解答

 public String addBinary(String a, String b) {
        char[] aa = a.toCharArray();
        char[] bb = b.toCharArray();
        int len = (a.length() >= b.length()) ? a.length() + 1 : b.length() + 1;
        int[] res = new int[len];
        int i=aa.length-1,j=bb.length-1;
        int index = len - 1;

        int m,n,val = 0;
        while(i>=0 || j>=0 || val > 0){
            m = (i < 0) ? 0 : aa[i] - '0';
            n = (j < 0) ? 0 : bb[j] - '0';
            res[index--] = (m + n + val) % 2;
            val = (m + n + val) / 2;

            i--;
            j--;
        }
        String str = "";
        for(int t=0;t<len;t++){
            str += res[t];
        }
        if('0' == str.charAt(0)){
            return str.substring(1,str.length());
        }else
            return str;
    }

我的错点:
(1)要考虑到二进制加法和十进制的加法是同理的,都可以使用取余和除法来处理!但是进位要使用除法,该位置的值要使用取余!我开始没注意到这一点,直接列出了各种情况;
(2)要考虑进位的要求,当进位是1时,哪怕 i 或者 j 都小于0时,也是要计算的!重点:最后一位 的进位!
(3)三目运算符。有一点是很重要:当i < 0时,假设这一位为0,不影响计算;
(4)char和int类型的转换不能直接进行强转!最简单的方法是字符减去‘0’ 。
之前做过一个链表求和的问题,那个不是字符串,原理相同。
(5)也可以考虑设置result为一个空串,代码:

 public String addBinary(String a, String b) {
        char[] aa = a.toCharArray();
        char[] bb = b.toCharArray();

        int i=aa.length-1,j=bb.length-1;

        String str = "";
        int m,n,val = 0;
        while(i>=0 || j>=0 || val > 0){
            m = (i < 0) ? 0 : aa[i] - '0';
            n = (j < 0) ? 0 : bb[j] - '0';

            str = (m + n + val) % 2 + str;
            val = (m + n + val) / 2;

            i--;
            j--;
        }

        if('0' == str.charAt(0) && str.length() > 1){
            return str.substring(1,str.length());
        }else
            return str;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuchonghao/article/details/79979182

LintCode Add Binary 二进制求和

LintCode Add Binary 二进制求和
  • wutingyehe
  • wutingyehe
  • 2015-06-18 17:27:47
  • 2460

leetcode67---Add Binary(二进制加法)

问题描述:Given two binary strings, return their sum (also a binary string).For example,a = "11" b = "1" ...
  • will130
  • will130
  • 2016-01-18 21:49:14
  • 210

67. Add Binary (二进制求和)

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1...
  • xiangwanpeng
  • xiangwanpeng
  • 2016-10-27 22:01:22
  • 196

LeetCode 67. 二进制求和

题目描述: 二进制求和        给定两个二进制字符串,返回他们的和(用二进制表示)。        案例:        a = &quot;11&quot;        b = &quot;...
  • qq_33168253
  • qq_33168253
  • 2018-04-02 17:09:03
  • 7

LeetCode 67 Add Binary(二进制相加)(*)

翻译给定两个二进制字符串,返回它们的和(也是二进制字符串)。例如, a = "11" b = "1" 返回 "100".原文Given two binary strings, return their...
  • NoMasp
  • NoMasp
  • 2016-02-02 13:49:53
  • 2224

67.二进制加法

Add Binary问题描述:Given two binary strings, return their sum (also a binary string).For example, a = “...
  • m0_37625947
  • m0_37625947
  • 2017-08-24 10:17:02
  • 215

leetcode67 二进制加法

//leetcode67 二进制数相加  public static void main(String argv[]){      String a="1111";      String b=...
  • sinat_31965367
  • sinat_31965367
  • 2017-03-23 16:04:12
  • 90

二进制反码求和

在看TCP/IP 时,看到IP 协议中有个 首部检验和 是用的 二进制反码求和。 不太理解,上网搜到了一个答案,记载下面。 以4bit(计算方便一点,和16bit是一样的)做检验和来验证。 ...
  • u012063703
  • u012063703
  • 2015-05-19 21:43:00
  • 1963

二进制求和(LintCode)

题目来源:LintCode 原题地址:http://www.lintcode.com/zh-cn/problem/add-binary/ 题目: 给定两个二进制字符串,返...
  • lyy_hit
  • lyy_hit
  • 2015-10-30 14:46:17
  • 977

二进制反码求和校验算法

原文链接:http://blog.chinaunix.net/uid-26758209-id-3146230.html 二进制反码求和校验算法     经常看计算机网络相关的书时,每次看到关于I...
  • dingmin1860
  • dingmin1860
  • 2015-09-07 17:22:12
  • 9760
收藏助手
不良信息举报
您举报文章:67. 二进制求和
举报原因:
原因补充:

(最多只允许输入30个字)