您的位置:首页 > 编程语言 > Java开发

?【Leetcode】67. Add Binary

2016-07-06 13:41 351 查看
Given two binary strings, return their sum (also a binary string).

For example,

a =
"11"


b =
"1"


Return
"100"
.

思路:

1、转换成十进制,进行相加,然后转换成二进制输出。

2、直接二进制计算然后输出。

代码1(思路1):

public class Solution {
ArrayList<Integer> result = new ArrayList<Integer>();
public String addBinary(String a, String b) {
int a1 = changeBinary2Decimal(a);
int a2 = changeBinary2Decimal(b);
int sum = a1 + a2;
changeDecimal2Binary(sum);

StringBuilder sb= new StringBuilder();
for(int i = 0 ; i < result.size() ; i ++ ){
sb.append(result.get(i));
}
return sb.toString();
}
public int changeBinary2Decimal(String a){
char[] a1 = a.toCharArray();
int sum = 0 ;
for (int i = 0 ; i <= a1.length-1 ; i ++){
sum += Integer.parseInt(a1[a1.length -1 - i]+"")*Math.pow(2, i);
}
return sum;
}
public void changeDecimal2Binary(int n){
if(n < 0){
System.out.println("Wrong input in changeDecimal2Binary!") ;
}
if(n <= 1){
System.out.println(n);
result.add(n);
}
else{
changeDecimal2Binary(n/2);
System.out.println(n%2);
result.add(n%2);
}
}

}
存在问题:

1、调用递归如何存储每次递归得到的返回值   ——这次声明了一个全局变量,在每次递归时记录每一次得到的商。但是据说有线程安全问题。表示不懂。

2、ArrayList和数组之间如何转换。几种常用的转换方式。没记住。

3、过不了全部测试集

运行结果:

194 / 294 test cases passed.
 Status:

Wrong Answer

 Submitted: 5 minutes ago
Input:"10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101""110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
Output:"-2"
Expected:"110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"

代码1(改进)

public class advanced_Solution {
public String addBinary(String a, String b) {
return changeDecimal2Binary(changeBinary2Decimal(a)+changeBinary2Decimal(b));
}
public int changeBinary2Decimal(String a){
char[] a1 = a.toCharArray();
int sum = 0 ;
for (int i = 0 ; i <= a1.length-1 ; i ++){
sum += Integer.parseInt(a1[a1.length -1 - i]+"")*Math.pow(2, i);
}
return sum;
}
public static String changeDecimal2Binary(int sum) {
returnInteger.toBinaryString(sum);
}
}
分析:十进制转二进制字符串直接用
Integer.toBinaryString(sum);
避免了一些类型转换。

但是过不了全部测试集,运行结果与上面的一样。转成十进制不对,进行加法计算得不到正确结果,结果如下,

10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101二进制转十进制:2147483647

110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011二进制转十进制:2147483647

和:21474836472147483647

11111111111111111111111111111110

啥原因?。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode