?【Leetcode】67. Add Binary

来源:互联网 发布:mac安装阿里旺旺 编辑:程序博客网 时间:2024/06/05 03:17

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) {     return Integer.toBinaryString(sum);    }}
分析:十进制转二进制字符串直接用
 Integer.toBinaryString(sum);
避免了一些类型转换。

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


10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101二进制转十进制:2147483647
110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011二进制转十进制:2147483647
和:21474836472147483647
11111111111111111111111111111110


啥原因?。。。


0 0
原创粉丝点击