美文网首页
[容易]408.二进制求和

[容易]408.二进制求和

作者: 我叫小小强 | 来源:发表于2017-07-01 11:33 被阅读68次

我是小小强,这是我的第6篇原创文章,阅读需要大约10分钟。


题目

LintCode:二进制求和

描述

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

样例

a = 11
b = 1
返回 100

思路

二进制相加,主要考虑进位的情况,每位在进行相加之后,要判断之前有无进位的情况,如果有,本位要进行加1处理,同时还要考虑是否要再次向高位进位。相加结果的二进制串长度是有可能超过原数的。
最直接的方法将二进制串转换为整数,进行相加,然后将结果再转换为二进制串。

实现

非递归实现

  1. java实现
public class Solution {
    /**
     * @param a a number
     * @param b a number
     * @return the result
     */
    public String addBinary(String a, String b) {
        // Write your code here
        if (a == null || b == null) {
            return null;
        }
        return parseInt2String(parseString2(a) + parseString2(b));
    }
    
     public static int parseString2(String str1){
        char c = 0;
        int sum = 0;
        for (int i = 0; i < str1.length(); i++) {
            if (str1.charAt(i) == '1'){
                sum += 1<<(str1.length()-1-i);
            }
        }
        return sum;
    }

    public static String parseInt2String(int a){
        String str = "";
        if (a == 0)
            return "0";
        while (a != 0){
            str += a % 2;
            a = a/2;
        }
        String str2 = "";
        int i = str.length();
        while (i > 0 ){
            str2+=str.charAt(i-1);
            i--;
        }
        return str2;
    }
}
  1. 结果分析
    结果:结果通过了LintCode的要求。
    分析:这种实现比较好理解,但是实现起来却没什么巧妙之处。

其它优化参考

lintcode 二进制求和 给定两个二进制字符串,返回他们的和
LIntCode-二进制求和
Short AC solution in Java with explanation

优秀代码

public class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1, j = b.length() -1, carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (j >= 0) sum += b.charAt(j--) - '0';
            if (i >= 0) sum += a.charAt(i--) - '0';
            sb.append(sum % 2);
            carry = sum / 2;
        }
        if (carry != 0) sb.append(carry);
        return sb.reverse().toString();
    }
}

相关文章

  • [容易]408.二进制求和

    我是小小强,这是我的第6篇原创文章,阅读需要大约10分钟。 题目 LintCode:二进制求和 描述 给定两个二进...

  • 408. 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)样例a = 11b = 1返回 100非常惭愧还不是自己想来的算...

  • 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 示例 1:输入: ...

  • 二进制求和

  • 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入...

  • 二进制求和

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-...

  • 二进制求和

    LeetCode第67题 题目描述: 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且...

  • 二进制求和

    题目 难度级别:简单 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 ...

  • 二进制求和

    力扣67题 思路:类似力扣第二题,相加之后模(%)进制数获得当前位数的值,然后用相加之后的数除以进制数,获得进位的...

  • 408.有效单词缩写 Python指针思路分析与细节解析!

    408.有效单词缩写[https://leetcode-cn.com/problems/valid-word-ab...

网友评论

      本文标题:[容易]408.二进制求和

      本文链接:https://www.haomeiwen.com/subject/pnmwcxtx.html