二进制求和

Posted duy666

tags:

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

问题描述:

给定两个二进制字符串,返回他们的和(用二进制表示),输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"

代码如下:

public static String addBinary(String s1,String s2) {
        StringBuilder sb = new StringBuilder();
        //表示进位
        int c = 0; 
        int s1_index= s1.length() - 1;
        int s2_index = s2.length() - 1;
        //字符从末尾开始相加。并加入StringBuilder对象sb中
        while(s1_index>=0 && s2_index>=0) {
            int count = s1.charAt(s1_index) + s2.charAt(s2_index) - 2*‘0‘ + c;
            if(count == 3) {
                c = 1;
                sb.append("1");
            }else if(count == 2){
                c = 1;
                sb.append("0");
            }else {
                c = 0;
                sb.append(count);
            }
            s1_index--;
            s2_index--;
        }
        //检验字符s1是否有剩余,有剩余继续添加
        while(s1_index>=0) {
            int count = s1.charAt(s1_index) - ‘0‘ + c;
            if(count>1) {
                c = 1;
                sb.append("0");
            }else {
                c = 0;
                sb.append(count);
            }
            s1_index--;
        }
        //检验字符s2是否有剩余,有剩余继续添加
        while(s2_index>=0) {
            int count = s2.charAt(s2_index) - ‘0‘ + c;
            if(count>1) {
                c = 1;
                sb.append("0");
            }else {
                c = 0;
                sb.append(count);
            }
            s2_index--;
        }
        //最后检验进位c是否等于1,等于1添加字符1
        if(c == 1) sb.append("1");
        //最后逆序返回
        return reserve(new String(sb));
    }
    //字符串逆序
    public static String reserve(String str) {
        char[] chars = str.toCharArray();
        int start = 0;
        int end = chars.length - 1;
        while(start<end) {
            char tmp = chars[start];
            chars[start] = chars[end];
            chars[end] = tmp;
            start++;
            end--;
        }
        return new String(chars);
    }

 

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

简单模拟二进制求和

408 二进制求和

以下代码片段的算法复杂度

每日一道 LeetCode (15):二进制求和

Leetcode67. 二进制求和(简单模拟)

HDU 2106 decimal system (进制转化求和)