前言
如果你之前刷过两数相加这类型题,那么对于本题,你很快就会有解题思路。
题目描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
思路
首先我们需要明白,二进制的核心思想就是满二进一,而作为两数相加的类型题,我们需要额外注意到的就是进位问题,对于这一点,我设置了一个布尔类型的变量来判断是否需要进位;其次,若给定两个字符串长度不一样该如何解决?我们可以对不够的位数以 ‘0’ 来补齐。这样一来,核心问题就都解决了,代码如下:
class Solution {
public String addBinary(String a, String b) {
StringBuffer sb = new StringBuffer();
char[] arr = a.toCharArray();
char[] brr = b.toCharArray();
boolean flag = false;
int left = arr.length - 1;
int right = brr.length - 1;
while(left >= 0 || right >= 0){
char aTemp = left >= 0 ? arr[left] : '0';
char bTemp = right >= 0 ? brr[right] : '0';
if(aTemp == '0' && bTemp == '0'){
if(flag){
sb.append("1");
flag = false;
}else{
sb.append("0");
}
}else if((aTemp == '0' && bTemp == '1') || (aTemp == '1' && bTemp == '0')){
if(flag){
sb.append("0");
flag = true;
}else{
sb.append("1");
}
}else{
if(flag){
sb.append("1");
flag = true;
}else{
sb.append("0");
flag = true;
}
}
left--;
right--;
}
if(flag == true)
sb.append("1");
return sb.reverse().toString();
}
}
总结:
这道题解决起来很顺手,也不枉刷题进行了一个月,继续加油!!!