【LeetCode-面試演算法經典-Java實現】【067-Add Binary(二進位制加法)】
阿新 • • 發佈:2018-12-24
原題
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
題目大意
給定兩個二進位制的字串,返回它們的和,也是二進行制字串。
解題思路
先將對應的兩個二進位制字串轉換成對應的整數陣列,從低位到高位進行相加,同時要考慮到最後相加還要擴充套件一位的情況。詳情請見程式碼實現。
程式碼實現
演算法實現類
public class Solution {
public String addBinary(String a, String b) {
int[] ca = new int[a.length()];
int[] cb = new int[b.length()];
// 將字元陣列中的值轉換了數值的0或者1
for (int i = 0; i < a.length(); i++) {
ca[i] = a.charAt(i) - '0';
}
// 將字元陣列中的值轉換了數值的0或者1
for (int i = 0; i < b.length(); i++) {
cb[i] = b.charAt(i) - '0' ;
}
// 使用ca儲存的長度長
if (ca.length < cb.length) {
int[] tmp = ca;
ca = cb;
cb = tmp;
}
int ai = ca.length - 1; // 字元陣列ca最後一個索引下標
int bi = cb.length - 1; // 字元陣列cb最後一個索引下標
int carry = 0; // 下位的進位標識
int result; // 載入的結果
// 計算比如:1010101101 + 10100
while (ai >= 0 && bi >= 0) {
result = ca[ai] + cb[bi] + carry;
ca[ai] = result % 2;
carry = result / 2;
ai--;
bi--;
}
// 處理餘下的數字
while (ai >= 0) {
result = ca[ai] + carry;
ca[ai] = result % 2;
carry = result / 2;
if (carry == 0) {
break;
}
ai--;
}
// 將字元陣列中的值轉換了字元的0或者1
for (int i = 0; i < ca.length; i++) {
ca[i] += '0';
}
// 不需要擴充套件一位
if (carry == 0) {
char[] ch = new char[ca.length];
for (int i = 0; i < ca.length; i++) {
ch[i] = (char) (ca[i]);
}
return new String(ch);
}
// 需要擴充套件一位
else {
char[] ch = new char[ca.length + 1];
ch[0] = '1';
for (int i = 0; i < ca.length; i++) {
ch[i + 1] = (char) (ca[i]);
}
return new String(ch);
}
}
}
評測結果
點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。