LeetCode-二进制求和(67)

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

结束语

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

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

你可能感兴趣的:(Java,leetcode,学习笔记)