LeetCode刷題Easy篇兩個二進位制字串相加,“和”也是二進位制字串
阿新 • • 發佈:2018-12-05
題目
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(); } }