LeetCode-二进制求和(67)

8 篇文章 0 订阅
4 篇文章 0 订阅

LeetCode-二进制求和(67)

这个题目并不算难,但是我花的时间并不短,原因是一开始没想到用一个变量来表示进位.

思路

  1. 首先,新建一个StringBuilder类型的变量用来返回结果,用一个变量level来表示是否有进位.
  2. 无进位的时候:
  • 同为0,则为0.
  • 同为1,则为0,进位.
  • 不同,则为1.
  1. 有进位的时候:
  • 同为0,则为1.不进位
  • 同为1,则为1.进位
  • 不同,则为0.不进位
  1. 考虑一个字符串结束的情况.一个字符串遍历结束时,另一个字符串所剩的长度就是L长-L短,然后把剩下的字符串跟返回结果合并就是了.
  2. 如果遍历完了所有的字符,需要判断一下是否还有进位,如果有,需要再追加个1.

代码

StringBuilder str = new StringBuilder();
        int level = 0; //是否有进位
        int al = a.length();
        int bl = b.length();
        if(al>bl){
            return addBinary(b,a);
        }
        for(int i=0;i< al;i++){
            String ac = a.substring(al-1-i,al-i);
            String bc = b.substring(bl-1-i,bl-i);
            if(level==0){ //无进位
                if(ac.equals(bc) && "0".equals(ac)){
                    str.append("0");
                }else if(ac.equals(bc) && "1".equals(ac)){
                    str.append("0");
                    level = 1;
                }else{
                    str.append("1");
                }
            }else{ //有进位
                if(ac.equals(bc) && "0".equals(ac)){
                    str.append("1");
                    level = 0;
                }else if(ac.equals(bc) && "1".equals(ac)){
                    str.append("1");
                }else{
                    str.append("0");
                }
            }
            //a结束
            if(i==al-1){
                for(int j=0;j<bl-al;j++){
                    String bcc = b.substring(bl-al-1-j,bl-al-j);
                    if(level==0){
                        str.append(bcc);
                    }else{
                        if(bcc.equals("0")){
                            str.append("1");
                            level = 0;
                        }else{
                            str.append("0");
                        }
                    }
                }
                if(level==1){
                    str.append("1");
                }
                break;
            }
        }
        return str.reverse().toString();

结束语

谋定而后动,磨刀不误砍柴工.先把各种情况尽可能考虑全面了再敲代码比直接动手要好很多.

哪怕再简单的程序,考虑的很全面了,想要编码完成一次通过也不容易,可以使用Idea等工具进行调试,避免因为简单的错误耽误大量的时间.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值