给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
//感想:今天作了好像有三题吧,如今基本都跳过hard了,不太愿意去想,还看了并发的一些东西,看的真让人头大,全是一些源码的东西,还有几分钟就要去锻炼了,想一想仍是写篇水文吧,刚刚作完这题,基本不太难,很像那种相似的题目,这种类型的题目感受仍是挺多的,就是这种加法的链表的这种感受,就是会感受比较麻烦,由于通常这种题目加的类型都比较怪异,可能须要处理,好比两个长度不同啊这种问题。并发
//思路:这道题我一开始想的是什么两个字符串的长度处理同样,分别来慢慢细化,仍是以为写起来太麻烦,我就去看了一下答案,发现答案都是将字符串的长度给对齐,我以为好low,不想这么作,而后我本身以为应该能够,就写了,确实要精简不少,感受看上去比较舒服,就是当你越界的时候我就让你为0,用一个3目运算符就搞定了,仍是能够的。app
下面是代码:有什么问题能够给我留言,知道的必定给你解释。ui
1 class Solution { 2 public String addBinary(String a, String b) { 3 StringBuilder res=new StringBuilder(); 4 int m=a.length(); 5 int n=b.length(); 6 int i=m-1; 7 int j=n-1; 8 int carry=0; 9 while(i>=0||j>=0) 10 { 11 12 int x=(i>=0)?a.charAt(i)-'0':0; 13 int y=(j>=0)?b.charAt(j)-'0':0; 14 i--; 15 j--; 16 int sum=x+y+carry; 17 res.append(sum%2); 18 carry=sum/2; 19 20 } 21 if(carry!=0) 22 res.append(carry); 23 res.reverse(); 24 return res.toString(); 25 26 } 27 }