栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode字符串67二进制求和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode字符串67二进制求和

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

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

示例 1:

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

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

思路:二进制求和

1.统一两个字符串长度,长度短的补0

2.从最后一位开始,倒序遍历,分情况讨论

        2.1定义一个字符,表示是否需要进位

        2.2如果两个都是1或者两个都是0,则累加后当前位总是0,并且两个都是1时需要进位1

        2.3如果两个为一个1一个0,则累加后当前位总是1

3.判断最后一个字符是否进位,进位则再添加一个1

4.之前添加的元素为倒序,反转字符串

public class addbinary {
    public String addBinary(String a, String b) {
        //这段代码是将将两个字符串长度统一
        int alength = a.length()-1;
        int blength = b.length()-1;
        StringBuilder stringBuilder = new StringBuilder();
        //如果一个字符串长度小,将缺失的部分用0补齐,例如1和111补齐为001和111
        if (alength < blength){
            for (int i = 0; i < blength - alength; i++){
                stringBuilder.append("0");
            }
            stringBuilder.append(a);
            //将补齐后的字符串重新赋值给该字符串
            a = stringBuilder.toString();
            //两者统一长度
            alength = blength;
        }else {
            for (int i = 0; i < alength - blength; i++){
                stringBuilder.append("0");
            }
            stringBuilder.append(b);
            b = stringBuilder.toString();
            blength = alength;
        }

        StringBuilder result = new StringBuilder();
        //c用来记录是否需要进位
        char c = 0;
        while(alength >= 0 && blength >= 0){
            //两者均为1或者或者均为0
            if (a.charAt(alength) == b.charAt(blength)){
                //如果有进位
                if (c == '1'){
                    result.append('1');
                    //消除进位
                    c = '0';
                }else {
                    //如果两个都是1,则当前位是0,进位1;如果两个都是0,则当前位是0,无进位
                    result.append('0');
                }
                //如果两个都是1
                if (a.charAt(alength) == '1'){
                    //下一个字符需要进位
                    c = '1';
                }
            }else { //0+1的情况
                //判断是否需要进位
                if (c == '1'){
                    result.append('0');
                }else {
                    //0+1的情况当前位永远都是1
                    result.append('1');
                }
            }
            alength--;
            blength--;
        }
        //判断最后一个字符是否进位,进位则再添加一个1
        if (c == '1'){
            result.append('1');
        }
        StringBuilder ans = new StringBuilder();
        //result为逆序,需要反转字符串
        for (int i = result.length()-1; i >= 0; i--) {
            ans.append(result.charAt(i));
        }
        return ans.toString();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号