题目:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
- 每个字符串仅由字符
'0'
或'1'
组成。 1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
思路:
遍历a和b的每一个字符,根据二进制的相加规则,当前位相加再%2则为结果,进位则/2。
可以先建立一个StringBuilder类型的dbd,从后往前,将每一位相加,结果加入dbd,最后反转输出。
java代码:
class Solution {
public String addBinary(String a, String b) {
if (a == null || a.length() == 0) {
return b;
}
if (b == null || b.length() == 0) {
return a;
}
StringBuilder sbd = new StringBuilder();
int al = a.length() - 1;
int bl = b.length() - 1;
int sum = 0;
int carry = 0;
while (al >= 0 || bl >= 0) {
sum = carry;
if (al >= 0) {
sum+=(a.charAt(al)-'0');
al--;
}
if (bl >= 0) {
sum+=(b.charAt(bl)-'0');
bl--;
}
sbd.append(sum%2);
carry = sum/2;
}
if(carry!=0) {
sbd.append(carry);
}
return sbd.reverse().toString();
}
}
由于水平有限,文章中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!
及时更新最新文章和学习资料,一起来学习:
推荐阅读:
【leetcode-数组】买卖股票的最佳时机 II - CSDN博客