leetcode 67:二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
- 每个字符串仅由字符
'0'
或'1'
组成。 1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
Related Topics
位运算
数学
字符串
模拟
位运算
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int rightA = a.length()-1;
int rightB = b.length()-1;
int add = 0;
//加法
while (rightA>=0 && rightB>=0){
int sum = a.charAt(rightA)-'0' + b.charAt(rightB)-'0'+add;
sb.append(sum%2);
add = sum/2;
rightA--;
rightB--;
}
//可能其中一条字符串没有加完
while (rightA >=0){
int sum = a.charAt(rightA)-'0'+add;
sb.append(sum%2);
add = sum/2;
rightA--;
}
while (rightB >= 0){
int sum = b.charAt(rightB)-'0'+add;
sb.append(sum%2);
add = sum/2;
rightB--;
}
//判断进位是否为0
if(add!=0){
sb.append(add);
}
return sb.reverse().toString();
}
}
解答成功:
执行耗时:1 ms,击败了99.99% 的Java用户
内存消耗:40.3 MB,击败了24.14% 的Java用户
简化:
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int rightA = a.length()-1;
int rightB = b.length()-1;
int add = 0;
//加法
while (rightA>=0 || rightB>=0){
if(rightA >= 0){
add += a.charAt(rightA) - '0';
}
if(rightB >= 0){
add += b.charAt(rightB) - '0';
}
sb.append(add%2);
add = add/2;
rightA--;
rightB--;
}
//判断进位是否为0
if(add!=0){
sb.append(add);
}
return sb.reverse().toString();
}
}