【两个字符串型二进制数相加】

力扣简单题,两个字符串型二进制数相加,计算相加结果输入字符结果


今天有空,打开力扣刷一刷题。先来个简单题,找点感觉。


下面是题目

在这里插入图片描述

这道题,一看第一想法就是,两个字符串编程字符数组,然后从后到前循环,aChar[i] + bChar[i] + flag flag 进位标志 会有 <2 =2 和 > 2 几种情况。

如果比较短的那个数组遍历完成之后,在同理在次基础上处理下剩余的部分。

public String addTwoNumber(String a , String b) {
        char[] aChars = null;
        char[] bChars = null;
        //这里让固定让aChars存储最长的字符串数组,后面方便操作
        if(a.length() > b.length()) {
            aChars = a.toCharArray();
            bChars = b.toCharArray();
        } else {
            aChars = b.toCharArray();
            bChars = a.toCharArray();
        }

        int flag = 0;
        int current =0;
        StringBuffer res = new StringBuffer();
        for (int i = 0; i < bChars.length; i++) {
            int tmp = Integer.parseInt(bChars[bChars.length-i-1]+"") + Integer.parseInt(aChars[aChars.length-i-1]+"") + flag;
            if( tmp < 2 ) {
                flag = 0;
                current = tmp;
            }else if ( tmp == 2 ) {
                flag = 1;
                current = 0;
            } else {
                flag = 1;
                current = 0;
            }
            res.append(current);
        }

        for( int j = aChars.length - bChars.length ; j >= 0;j--) {
            
            int tmp = aChars[j]+flag;
            if( tmp < 2 ) {
                flag = 0;
                current = tmp;
            }else if ( tmp == 2 ) {
                flag = 1;
                current = 0;
            } else {
                flag = 1;
                current = 1;
            }
            res.append(current);
        }

        if(flag == 1) res.append(1);
        //反转一下字符串,输出结果
        return res.reverse().toString();

    }

输出结果
在这里插入图片描述垃圾!!!

看了下官方题解,一行解决,nb 我!!!

public String addBinary(String a, String b) {
        return Integer.toBinaryString(
            Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
        );
    }
于是决定优化一下,自己的垃圾代码

然后,把3ms优化成了16ms。md,但是好在自己写的这种方式,更加健壮,官方给的那个需要判断一下字符串长度。太长了不能转成parseInt。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值