题目
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();
}
}