给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:>
输入: a = “1010”, b = “1011”
输出: “10101”
我的思路是,先将字符串翻转,然后每一位对比,如果相加>=2则进位加1
class Solution {
public String addBinary(String a, String b) {
String a1 = reverse(a);
String b1 = reverse(b);
String str = "";
int a2 = 0,b2 = 0;
int len = Math.max(a1.length(),b1.length());
for(int i=0;i<len;i++){
try{
a2 = Integer.parseInt(a1.charAt(i)+"");
}catch(Exception e){
a2 = 0;
}
try{
b2 = Integer.parseInt(b1.charAt(i)+"");
}catch(Exception e){
b2 = 0;
}
str += a2+b2;
}
String result = "";
int flag = 0;
int[] an = new int[str.length()+1];
for(int i=0;i<str.length();i++){
an[i] = Integer.parseInt(str.charAt(i)+"");
}
an[an.length-1] = 0;
for(int i=0;i<an.length-1;i++){
flag = an[i];
if(flag>=2){
an[i] = flag%2;
an[i+1] += 1;
}
}
String s = "";
for(int i=0;i<an.length;i++){
if((i==an.length-1)&&(an[an.length-1]==0)){
break;
}
s += an[i];
}
return reverse(s);
}
public String reverse(String s){
String str = "";
for(int i=s.length()-1;i>=0;i--){
str += s.charAt(i);
}
return str;
}
}
执行用时 : 15 ms, 在Add Binary的Java提交中击败了7.56% 的用户
内存消耗 : 37.7 MB, 在Add Binary的Java提交中击败了21.58% 的用户
结果又是比较耗时的写法,想要写出又短又有效率的代码真的难啊 !!!