?【Leetcode】67. Add Binary
2016-07-06 13:41
351 查看
Given two binary strings, return their sum (also a binary string).
For example,
a =
b =
Return
思路:
1、转换成十进制,进行相加,然后转换成二进制输出。
2、直接二进制计算然后输出。
代码1(思路1):
1、调用递归如何存储每次递归得到的返回值 ——这次声明了一个全局变量,在每次递归时记录每一次得到的商。但是据说有线程安全问题。表示不懂。
2、ArrayList和数组之间如何转换。几种常用的转换方式。没记住。
3、过不了全部测试集
运行结果:
194 / 294 test cases passed.
Input:"10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101""110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
Output:"-2"
Expected:"110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"
代码1(改进)
但是过不了全部测试集,运行结果与上面的一样。转成十进制不对,进行加法计算得不到正确结果,结果如下,
10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101二进制转十进制:2147483647
110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011二进制转十进制:2147483647
和:21474836472147483647
11111111111111111111111111111110
啥原因?。。。
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 |
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树