一 题目
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1
or 0
.
Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
二 分析
easy级别,又事数学类型。求字符串二进制的求和运算,我先尝试转换为long直接算。
public static String addBinary(String a, String b) {
//int len = a.length()>=b.length()? b.length():a.length();
Long al = Long.parseLong(a, 2);
Long bl = Long.parseLong(b, 2);
long tmp = al+bl;
String res = Long.toBinaryString(tmp);
return res;
}
但是遇到这种case就跪了。
"10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"
"110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
还是老实的回来做吧。
public static void main(String[] args) {
// TODO Auto-generated method stub
String res = addBinary("11","1");
System.out.println( res);
String res1 = addBinary("1010","1011");
System.out.println( res1);
}
public static String addBinary(String a, String b) {
//遍历最长路径
int len = a.length()>=b.length()? a.length():b.length();
String res = "";
int tmp = 0;
StringBuffer sb = new StringBuffer();
for(int i=0;i<len;i++){
int ai = i<a.length()? a.charAt(a.length()-i-1)-'0':0;
int bi = i<b.length()? b.charAt(b.length()-i-1)-'0':0;
int sum = ai + bi + tmp;
//保存本次的结果
sb.insert(0,(sum%2));
//进位
tmp = sum/2;
}
res = sb.toString();
if(tmp==1){//最后还有进位的情况
res ="1"+res;
}
return res;
}
Runtime: 2 ms, faster than 70.12% of Java online submissions for Add Binary.
Memory Usage: 36.2 MB, less than 100.00% of Java online submissions for Add Binary.