文章目录
题目描述
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。
题目来源
解题思路
代码实现
版本一:(未通过所有测试用例)
class Solution {
public String addBinary(String a, String b) {
char []tempa=a.toCharArray();
char []tempb=b.toCharArray();
long b2da=0,b2db=0;
long k=1,temp=0;
for(int i=tempa.length-1;i>=0;i--) {
temp=k*(tempa[i]-48);
b2da+=temp;
k+=k;
}
temp=0;
k=1;
for(int i=tempb.length-1;i>=0;i--) {
temp=k*(tempb[i]-48);
b2db+=temp;
k+=k;
}
long sum=b2da+b2db;
if(sum==0)return "0";
long re=0;
String result="";
Stack<String> st=new Stack<String>();
while(sum>0) {
re=sum%2;
st.push(String.valueOf(re));
sum=sum/2;
}
while(!st.empty()) {
result=result+st.pop();
}
return result;
}
}
版本二:(通过所有测试用例)
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb=new StringBuilder();
int i=a.length()-1;
int j=b.length()-1;
int re=0;
while(i>=0||j>=0||re!=0) {
int t1=i>=0?a.charAt(i--)-'0':0;
int t2=j>=0?b.charAt(j--)-'0':0;
re=t1+t2+re;
sb.append(re%2);
re/=2;
}
return sb.reverse().toString();
}
}
性能评估
每个人都不能一下子完成巨大的工作量,就像模拟寄存器一样,处理好当前的值,该进则进,步步前行。你会发现有一天,你也可以完成那看似不可能的事情。