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

这篇博客探讨了在LeetCode上遇到的第67题,即如何将两个二进制字符串相加并返回其二进制表示。作者从简单的角度出发,详细解释了解决这个问题的思路和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近几天在领扣(https://leetcode-cn.com)刷题...以此记录

水平不够,从简单的做起。

 

67. 二进制求和

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

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

    class Solution {
        public String addBinary(String a, String b) {
            char[] aArray = a.toCharArray();
            char[] bArray = b.toCharArray();
            if(aArray.length>=bArray.length){
                return addBinary(aArray,bArray);
            }
            return addBinary(bArray,aArray);
        }

        /** 长数组+短数组*/
        public String addBinary(char[] aArray,char[] bArray){
            //初始化进位标志
            int target = 0;
            //a数组的起始位
            int initIndex = aArray.length-bArray.length;
            for(int i = bArray.length-1;i>=0;i--){
                //两数组、进位标志相加得到的字符
                int temp = (int)aArray[initIndex+i]+(int)bArray[i]+ target - (int)'0';
                if(temp>'1'){
                    //有进位
                    aArray[initIndex+i] = (char)(temp - 2);
                    target = 1;
                }else {
                    //无进位
                    aArray[initIndex+i] = (char)temp;
                    target = 0;
                }
            }
            //b数组遍历完成
            //无进位
            if(target == 0){
                return String.valueOf(aArray);
            }
            //进位
            //遍历a数组剩余部分
            for(int i = initIndex - 1;i>=0;i--){
                //进位后不需再进位
                if(aArray[i]=='0'){
                    //改为1
                    aArray[i]++;
                    return String.valueOf(aArray);
                }
                //改为0
                aArray[i]--;
            }
            //遍历a完成仍有进位
            return "1"+String.valueOf(aArray);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值