[Leetcode] 67. Add Binary

本文详细介绍了如何实现两个二进制数的相加操作,通过Java代码展示了位运算和进位处理的过程,提供了两种不同的实现方法,并分析了时间复杂度和空间复杂度。

https://leetcode.com/problems/add-binary/

2019-10-05

class Solution {
    public String addBinary(String a, String b) {
        int sum = 0;
        int carry = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = a.length()-1, j = b.length() -1; i >= 0 || j >= 0; i--,j--) {
            sum = carry;
            sum += i>=0? a.charAt(i)-'0' : 0;// 补足位数较少的数字
            sum += j>=0? b.charAt(j)-'0' : 0;
            sb.append(sum%2);
            carry = sum/2;//进位
        }
        sb.append(carry == 1 ? carry : "");
        return sb.reverse().toString();
    }
    
}

2020-04-16

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int carry = 0;
        int aLen = a.length(), bLen = b.length();
        while(aLen > 0 || bLen > 0 || carry != 0) {
            // int opd1, opd2;
            // if(aLen <= 0) opd1 = 0; else opd1 = a.charAt(aLen-1) - '0';
            // if(bLen <= 0) opd2 = 0; else opd2 = b.charAt(bLen-1) - '0';
            // 改写成
            int opd1 = aLen <= 0 ? 0 : a.charAt(aLen-1) - '0';
            int opd2 = bLen <= 0 ? 0 : b.charAt(bLen-1) - '0';
            int temp = opd1 + opd2 + carry;
            sb.append(temp%2);
            // if(temp == 0 || temp == 1) {
            //     carry = 0;
            // } else if (temp == 2 || temp == 3) {
            //     carry = 1;
            // }
            // 改写成
            carry = temp/2;
            aLen--;
            bLen--;
        }
        return sb.reverse().toString();
    }
}

TC: O(n)
SC: O(n)
Note:

  1. if-else语句的简化
  2. char to int的简便转化方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值