题目要求:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
思路:
看到题目要求是一个关于二进制求和的问题,那么就要想一想二进制求和的结果有哪几种形式,of course,很简单,进位or不进位。那么哪种情况下进位,哪种情况下无需进位,
我们就来简单说一下。进位:1+1=2进位,1+1+1=3进位(当高位为1+1,低位又进一个位)。无需进位的情况:0+0=0,0+1=1.接下来继续想,当每个位上求和结果为2时,需要
进位,此位变为0,向高位进1;当求和结果为0或者1时,无需进位;当求和结果为3时 ,此位变为1,向高位进1.最后一个问题,就是怎么把字符串每个对
应位置上的数一 一相加,可以用String方法里的substring()方法。
代码示例:
class Solution { public String addBinary(String a, String b) { String result = ""; int aLen = a.length() - 1; int bLen = b.length() - 1; int sum = 0; while(aLen>=0 || bLen>=0){ if(aLen>=0){ sum +=Integer.parseInt(a.substring(aLen,aLen+1)); aLen--; } if(bLen>=0){ sum +=Integer.parseInt(b.substring(bLen,bLen+1)); bLen--; } if(sum==2){ result = "0" + result; sum=1; }else if(sum==0 || sum==1) { result = sum +"" + result; sum = 0; }else if(sum==3){ result = "1" + result; sum = 1; } } if(sum==1) result = "1" + result; return result; } }
注意:
result = sum +"" + result;中的双引号是把整型的sum转换为字符串,等号左边的result就是字符串连接后的结果。