LC.67. 二进制求和

前言

 如果你之前刷过两数相加这类型题,那么对于本题,你很快就会有解题思路。

题目描述

 给你两个二进制字符串,返回它们的和(用二进制表示)。
 输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = “11”, b = “1”
输出: “100”

示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

思路

 首先我们需要明白,二进制的核心思想就是满二进一,而作为两数相加的类型题,我们需要额外注意到的就是进位问题,对于这一点,我设置了一个布尔类型的变量来判断是否需要进位;其次,若给定两个字符串长度不一样该如何解决?我们可以对不够的位数以 ‘0’ 来补齐。这样一来,核心问题就都解决了,代码如下:

class Solution {
    public String addBinary(String a, String b) {
        StringBuffer sb = new StringBuffer();
        char[] arr = a.toCharArray();
        char[] brr = b.toCharArray();
        boolean flag = false;
        int left = arr.length - 1;
        int right = brr.length - 1;
        while(left >= 0 || right >= 0){
            char aTemp = left >= 0 ? arr[left] : '0';
            char bTemp = right >= 0 ? brr[right] : '0';
            if(aTemp == '0' && bTemp == '0'){
                if(flag){
                    sb.append("1");
                    flag = false;
                }else{
                    sb.append("0");
                }
            }else if((aTemp == '0' && bTemp == '1') || (aTemp == '1' && bTemp == '0')){
                if(flag){
                    sb.append("0");
                    flag = true;
                }else{
                    sb.append("1");
                }
            }else{
                if(flag){
                    sb.append("1");
                    flag = true;
                }else{
                    sb.append("0");
                    flag = true;
                }
            }
            left--;
            right--;
        }
        if(flag == true)
            sb.append("1");
        return sb.reverse().toString();
    }
}

总结:
 这道题解决起来很顺手,也不枉刷题进行了一个月,继续加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值