?【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
- [LeetCode]67.Add Binary
- LeetCode --- 67. Add Binary
- [Leetcode] 67. Add Binary
- [leetcode] 67.Add Binary
- 【leetcode】67. Add Binary
- [leetcode] 67.Add Binary
- [leetcode] 67. Add Binary
- 【Leetcode】67. Add Binary
- 67. Add Binary LeetCode
- 【LeetCode】67. Add Binary
- leetcode--67. Add Binary
- leetcode 67. Add Binary
- LeetCode 67. Add Binary
- LeetCode *** 67. Add Binary
- leetcode 67. Add Binary
- 【leetcode】67.Add Binary
- LeetCode 67. Add Binary
- LeetCode-67.Add Binary
- Android 存储中的内部存储和外部存储
- 上传图片方便使用
- 安装windows系统到移动硬盘
- 可能是讲解Android事件分发最好的文章
- asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- ?【Leetcode】67. Add Binary
- LintCode之斐波那契数列
- 格式化JSON输出
- Redis能干啥?细看11种Web应用场景
- 入职第一天的一些准备
- 网站域名知识解析:什么是动态域名
- 身份证校验
- Intellij IDEA创建Maven Web项目
- java多线程并发基础