LeetCode -67.二进制求和 -简单

一、题目描述

在这里插入图片描述
示例:
在这里插入图片描述
二、解题思路
**将两个字符串用0补到长度相同,保证全程可以进行同样的操作。**实际操作时,对两个字符串逆向进行处理,并在下标超出0时,对应的值都为0即可。
使用StringBuffer用于保存结果,最后调用StringBuffer的reverse方法反转,即可得到正确的答案。

三、编程实现

class Solution {
    public String addBinary(String a, String b) {
        if(a.length() < 1 || b.length() > Math.pow(10,4))
            return null;

        StringBuffer sb = new StringBuffer();
        int isPlus = 0; //标志是否进位

        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
            int sum = isPlus; //有进位则加1
            //相当于把两个字符串用0补到一样长
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;

            sb.append(sum % 2);
            isPlus = sum / 2;
        }
        if (isPlus == 1)
            sb.append(1);
        return sb.reverse().toString();
    }
}

for循环的条件,同时对两个字符串的码点进行遍历。特别要注意的是,判断循环是否继续时,用的是i >= 0 || j >= 0,或。这就是把两个字符串视作相同长度,当下标小于零的时候,都看做是0即可。

//相当于把两个字符串用0补到一样长
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值