此博客链接:https://www.cnblogs.com/ping2yingshi/p/13158404.html
二进制求和(106min)
题目链接:https://leetcode-cn.com/problems/add-binary/
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
题解:
思路:
1.把字符串反转
2.定义一个进位的变量
3. 定义一个存储结果的变量
4.取长度长的字符串循环
5.分三种情况:情况1.两个字符串都是1,进位也是一,则把1加入到新定义的字符串变量中;进位是0,则把0加入到新定义的字符串中。 最后把进位都置为1。
情况2.两个字符串一个是1,一个是0,如果进位是1,那么结果中存入0,,进位重新置为1,如果进位是0,那把1加入结果 中,进位置为0.
情况3.两个字符串都是0,如果进位是1,把1加入到结果中,进位置为0,如果进位为0,则把0加入到结果中,进位置为0.
6.对最后一次进位做判断,如果最后一次进位是1,则把1加入到结果中。
7.把字符串在反转回来.
class Solution { public String addBinary(String a, String b) { //先把字符串变成stringBuiler类型 StringBuilder sum=new StringBuilder(); StringBuilder revasead=new StringBuilder(a); StringBuilder revasebd=new StringBuilder(b); //反转字符串 revasead=revasead.reverse(); revasebd=revasebd.reverse(); //取长字符串 int max=Math.max(a.length(),b.length()); //定义一个进位的变量 char aplus='0'; //开始判断 for(int i=0;i<max;i++) { char revasea = i >=a.length()?'0':revasead.charAt(i); // char aChar = i >= aLength ? '0' : ar.charAt(i); char revaseb = i >=b.length()?'0':revasebd.charAt(i); // char revaseb = i >=b.length()?'0':revasebd.chatAt(i); //情况1 if(revasea=='1'&&revaseb=='1') { if(aplus=='1') { sum.append('1'); } else sum.append('0'); aplus='1'; } //情况2 else if((revasea=='1'&&revaseb=='0')||(revasea=='0'&&revaseb=='1')) { if(aplus=='1') { sum.append('0'); aplus='1'; } else { sum.append('1'); aplus='0'; } } //情况3 else if(revasea=='0'&&revaseb=='0') { if(aplus=='1') { sum.append('1'); aplus='0'; } else { sum.append('0'); aplus='0'; } } } if(aplus=='1') sum.append(aplus); return sum.reverse().toString(); } }