67. 二進位制求和
給你兩個二進位制字串,返回它們的和(用二進位制表示)。
輸入為非空字串且只包含數字1
和0
。
示例 1:
輸入: a = "11", b = "1"
輸出: "100"
示例 2:
輸入: a = "1010", b = "1011"
輸出: "10101"
解題方案
思路整體思路是將兩個字串較短的用 000 補齊,使得兩個字串長度一致,然後從末尾進行遍歷計算,得到最終結果。
本題解中大致思路與上述一致,但由於字串操作原因,不確定最後的結果是否會多出一位進製,所以會有 2 種處理方式:
第一種,在進行計算時直接拼接字串,會得到乙個反向字元,需要最後再進行翻轉
第二種,按照位置給結果字元賦值,最後如果有進製,則在前方進行字串拼接新增進製
時間複雜度:o(n)o(n)o(n)
官方版解法:
class solution
return ans.reverse().tostring();
}}
民間版:
public string addbinary(string a, string b)
int maxlen = a.length()>b.length()?a.length():b.length();
int inta = new int[maxlen];
int intb = new int[maxlen];
int res = new int[maxlen];
arrays.fill(inta, 0);
arrays.fill(intb, 0);
arrays.fill(res, 0);
int cusora = maxlen-1;
char stra = a.tochararray();
for (int i = stra.length-1; i >= 0; i--)
int cusorb = maxlen-1;
char strb = b.tochararray();
for (int i = strb.length-1; i >= 0; i--)
int index = maxlen-1;
boolean flag = false;
while (index > 0) else if (count == 2 && flag) else if (count == 0 && flag) else if (count == 0 && !flag) else if (count == 1 && !flag) else if (count == 1 && flag)
} //index=0
int count = inta[index] + intb[index];
string string = null;
if (count ==2 && flag) else if (count ==2 && !flag) else if (count==0 && !flag) else if (count==0 && flag) else if (count==1 && !flag) else if (count==1 && flag)
for (int i = 1; i < res.length; i++)
return string;
}
二進位制求和(力扣第67題)
題目 給你兩個二進位制字串,返回它們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例1 輸入 a 11 b 1 輸出 100 示例2 輸入 a 1010 b 1011 輸出 10101 分析 其實就是兩個二進位制數的加法運算,兩個二進位制數相加,首先設定乙個進製識別符號flag,初始值設...
二進位制求和(力扣第67題)
題目 給你兩個二進位制字串,返回它們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例1 輸入 a 11 b 1 輸出 100 示例2 輸入 a 1010 b 1011 輸出 10101 分析 其實就是兩個二進位制數的加法運算,兩個二進位制數相加,首先設定乙個進製識別符號flag,初始值設...
力扣 二進位制求和
給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 首先判斷兩個字串的長度,找到最長的那個,將兩個字串反轉,再將短的那乙個用字元 0 補齊 定義乙個字...