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

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


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


下面是题目

这道题,一看第一想法就是,两个字符串编程字符数组,然后从后到前循环,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。

经验分享 程序员 微信小程序 职场和发展