一、題目
給你兩個二進制字符串?a
?和?b
?,以二進制字符串的形式返回它們的和。
示例?1:
輸入:a = "11", b = "1" 輸出:"100"
示例?2:
輸入:a = "1010", b = "1011" 輸出:"10101"
二、思路解析
這道題的關鍵在于如何實現進位操作,以及雙指針的移動等問題。
我們要先定義兩個指針 cur1
和 cur2
?,分別指向字符串 a
和 b
的末尾,同時利用變量 t
來保存進位值。
通過循環遍歷兩個字符串,將對應位置的字符轉換為數字后相加,并將結果添加到結果字符串 ret
中。最后將結果字符串反轉并返回。
但實現的過程中,還有些細節要處理。
- 每次循環,將當前位置上的字符轉換為數字后相加,并加上進位值?
t
。 - 將相加的結果取模 2(即除以 2 取余數),得到當前位的值,并更新進位值?
t
。
最后,我們還要把字符串反轉,然后返回即可。
三、完整代碼
class Solution {public String addBinary(String a, String b) {StringBuffer ret = new StringBuffer();int cur1 = a.length() - 1;int cur2 = b.length() - 1;int t = 0;while(cur1 >= 0 || cur2 >= 0 || t != 0){if(cur1 >= 0){t += a.charAt(cur1--) - '0';}if(cur2 >= 0){t += b.charAt(cur2--) - '0';}ret.append((char)('0' + (t % 2)));t /= 2;}ret.reverse();return ret.toString();}
}
以上就是本篇博客的全部內容啦,如有不足之處,還請各位指出,期待能和各位一起進步!