一、题目描述
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、运行结果
三、解题思路
从两个字符串的最后一位(数字的最低位)开始往前遍历,两个字符串对应的位和低一位的进位相加,对2求余得当前位的结果,除以2得到当前位的进位,直到遍历完两个字符串。
如果最高位计算后还有进位,则要在结果字符串的最前面加上一个1。
四、AC代码
class Solution {
public String addBinary(String a, String b) {
int aIndex = a.length()-1, bIndex = b.length()-1;
StringBuilder sb = new StringBuilder();
int flag = 0; //进位
while(aIndex >= 0 || bIndex >= 0){
int aNum = aIndex >= 0? a.charAt(aIndex)-'0' : 0;
int bNum = bIndex >= 0? b.charAt(bIndex)-'0' : 0;
int res = (aNum + bNum + flag) % 2; //当前位结果
flag = (aNum + bNum + flag) / 2; //当前位的进位
sb.insert(0, String.valueOf(res)); //插入字符串前面
aIndex--;
bIndex--;
}
if(flag != 0) //最高位还有进位
sb.insert(0, String.valueOf(flag));
return sb.toString();
}
}