3632二进制求和

Posted 小雷FansUnion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3632二进制求和相关的知识,希望对你有一定的参考价值。

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

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

  

示例 1:

输入: a = "11", b = "1"

输出: "100"

示例 2:

输入: a = "1010", b = "1011"

输出: "10101"

  

提示:

每个字符串仅由字符 '0' 或 '1' 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/add-binary

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.computer;

/**

 * 二进制求和 给你两个二进制字符串,返回它们的和(用二进制表示)。

 *

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

 *

 * 和PlusOne这道题,思路基本一样,PlusOne是一个变量+固定的数字1。

 *  力扣

 *

 * @author wen.lei@brgroup.com

 *

 *         2022-2-18

 */

public class AddBinary

    /*示例 1:

     

        输入: a = "11", b = "1"

        输出: "100"

        示例 2:

     

        输入: a = "1010", b = "1011"

        输出: "10101"

          

     

        提示:

     

        每个字符串仅由字符 '0' 或 '1' 组成。

        1 <= a.length, b.length <= 10^4

        字符串如果不是 "0" ,就都不含前导零。

    */

    /**

     * 获得2个字符串的最大长度,从低位到高位逐个相加。维护最新的进位。如果最终产生1个进位,需要额外添加

     *

     * @param a

     * @param b

     * @return

     */

    public String addBinary(String a, String b)

        final int lengthA = a.length();

        final int lengthB = b.length();

        int length = Math.max(lengthA, lengthB);

        int plus = 0;

        StringBuilder sb = new StringBuilder();

        for (int index = 0; index < length; index++)

            int chAInt = 0;

            int chBInt = 0;

            if (index < lengthA)

               char chA = a.charAt(lengthA - index - 1);

               //int类型转换,强制转换不行(Ascii)

               //final int chAInt = (int)chA;

               //final int chBInt = (int)chB;

               chAInt = Character.digit(chA, 2);

            

            if (index < lengthB)

                char chB = b.charAt(lengthB - index - 1);

                chBInt = Character.digit(chB, 2);

            

            int sum = chAInt + chBInt + plus;

            sb.append(sum % 2);

            if (sum >= 2)

                plus = 1;

             else 

                plus = 0;

            

        

        //新产生1个最高位

        if (plus == 1)

            sb.append(plus);

        

        // 低位先维护的,展示时,高位在前

        return sb.reverse().toString();

    

执行结果:通过

显示详情

添加备注

执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:40.1 MB, 在所有 Java 提交中击败了11.10%的用户

通过测试用例:294 294

炫耀一下:

package test.leecode.computer;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.computer.AddBinary;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-18

 */

public class AddBinaryTest

    @Test

    public void test()

        AddBinary addBinary = new AddBinary();

        Assert.assertEquals("11",addBinary.addBinary("10""1"));

        Assert.assertEquals("100",addBinary.addBinary("1""11"));

        Assert.assertEquals("110",addBinary.addBinary("11""11"));

        Assert.assertEquals("1110",addBinary.addBinary("111""111"));

        Assert.assertEquals("10101",addBinary.addBinary("1010""1011"));

        Assert.assertEquals("1111",addBinary.addBinary("1000""111"));

    

    

以上是关于3632二进制求和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode67. 二进制求和

二进制求和

[CSP-S模拟测试]:数字(数学+高精度)

beautiful number 数位dp

Leetcode练习(Python):数学类:第67题:二进制求和:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。

Leetcode练习(Python):数学类:第67题:二进制求和:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。