LeetCode-67. 二进制求和
- 1、题目描述
- 2、解题思路
- 3、代码实现
- 4、解题记录
)
1、题目描述
题目描述:
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例1:
输入:a = “11”, b = “1”
输出:“100”
示例2:
输入:a = “1010”, b = “1011”
输出:“10101”
2、解题思路
解题思路:
设置一个变量用来表示进位,然后根据两个字符串的长度使用while循环按位进行计算即可,并用字符串表示计算结果。
3、代码实现
class Solution {
public String addBinary(String a, String b) {
int i = a.length() - 1, j = b.length() - 1;
String result = "";
int carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
sum += i >= 0 ? a.charAt(i--)-'0' : 0;
sum += j >= 0 ? b.charAt(j--)-'0' : 0;
result = sum % 2 + result;
carry = sum / 2;
}
if(carry != 0) { //判断最高位是否产生进位
result = carry +result;
}
return result;
}
}
在具体实现过程中,未考虑性能,运行结果如下所示
4、解题记录
- 最初思路
最初看到该题的想法是先将二进制转为十进制求和,然后在转为二进制,由于可能存在较长的字符串,会导致整数范围溢出,所以该思路不太可取,健壮性较差。 - 后来改为将两个字符串转为字符数组按位计算
- 然后又考虑到无需将字符串转为数组,由于是二进制字符串可以直接通过charAt() 获取某位置字符。