LeetCode刷题Easy篇两个二进制字符串相加,“和”也是二进制字符串

题目

Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

我的尝试

我的方案:两个指针,从尾部开始遍历,取出当前元素求“与运算”,如果需要进位,设置addNumber=1,不需要则为0.

可能存在长度不同的情况,所以遍历条件为p>=0||q>=0,最高位情况,单独处理if addnumber不为0,发生最高位进位。完整代码如下:

leetcode上有的代码比较简洁,利用了三元表达式,思路完全一样,leetcode测试通过,而且我感觉我的代码更容易理解,重构后的代码虽然简洁,但是不容易理解。

写算法的时候,大量时间花费在char的处理上,原来一直拿到的是char 1 对应的49,一直 49,48各种处理,不知道怎么取出数字,看了别的资料发现可以这样Character.getNumberValue。另外,可以利用“与”运算符。主题思路在掌握内容之中。为自己喝彩!!!

class Solution {
    public String addBinary(String a, String b) {
       int p=a.length()-1;
       int q=b.length()-1;
       char[] chara=a.toCharArray();
       char[] charb=b.toCharArray();
       int addNumber=0;
       StringBuilder stringBuilder=new StringBuilder();
       while (p>=0||q>=0){
           int  aCurrent=0;
           int  bCurrent=0;
           if (p<0) {
                 bCurrent=Character.getNumericValue(charb[q]);
           }
           else if (q<0) {
                 aCurrent=Character.getNumericValue(chara[p]);
           }
           else {
               aCurrent=Character.getNumericValue(chara[p]);
               bCurrent=Character.getNumericValue(charb[q]);
           }
           int  res=aCurrent^bCurrent^addNumber;
           //进位的判断不对,比如0 0 加一个进位的情况,这个情况不需要进位
           if (aCurrent+bCurrent+addNumber>=2){
               //需要进位
               addNumber=1;
           }
           else{
               addNumber=0;
           }
           stringBuilder.append(res);
           p--;
           q--;
       }
        if (addNumber!=0){
            stringBuilder.append(1);
        }
        return stringBuilder.reverse().toString();
    }
}

猜你喜欢

转载自blog.csdn.net/hanruikai/article/details/84325946