LeetCode-Add Binary
来源:互联网 发布:网络新媒体有哪些 编辑:程序博客网 时间:2024/06/08 10:12
Question:
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
解题思路:转化为求二进制加法。
- 开始想的是将字符串转换为char数组,然后用位运算先求异或^得到值放入新的数组中,求&得到进位,但是忽略了低位的进位。思路太复杂
- 发现其实就是把十进制加法,换成二进制,遇到2就进位。
测试案例
- 字符串为空(a为空,b为空或都为空)
- 字符串长度不一致时
- 最高位有进位时
思考:
用java编写的,用toCharArray转换为数组时,是从字符串的第一个字符开始存放到的,而我们想要的是从字符串的最后一位开始操作,所以要将字符数组倒置。eg:String a = “1011”.转换成的字符数组从0-3开始打印是1 0 1 1.而我们进行操作需要从最右边开始,即1101。
不知道是否还有其他的方法将字符串转成倒置的数组。有待进一步思考~
public class Solution { public String addBinary(String a, String b) { if(a==""&&b==""){ return ""; }else if(a ==""||a.equals("0")){ return b; }else if(b == "" || b.equals("0")) { return a; }else { char[] a_arry = a.toCharArray(); char[] b_arry = b.toCharArray(); int a_len = a_arry.length; int b_len = b_arry.length; //将数组倒置 char[] a_arry1 = new char[a_len]; char[] b_arry1 = new char[b_len]; int k = 0; for(int i=a_arry.length-1;i>=0;i--){ a_arry1[k] = a_arry[i]; k++; } int m = 0; for(int i=b_arry.length-1;i>=0;i--){ b_arry1[m] = b_arry[i]; m++; } //新建字符数组存放结果 int length = Math.max(a_len, b_len)+1; char[] new_arry = new char[length]; //谁的长度小选谁 int len = a_len>=b_len?b_len:a_len; System.out.println("len:"+len); int carry = 0;//进位标志 int i=0; //对两个数组的相同位置进行求和操作 for(i=0;i<len;i++){ int sum =(a_arry1[i]-'0')+(b_arry1[i]-'0')+carry; int temp = (sum==2?0:(sum>2?sum-2:sum)); carry = sum>=2?1:0; //放入new_arry中 new_arry[i] = (char) ('0'+temp); } //把剩下的另一部分放入new_arry中 while(i<a_len){ if(carry==1){ int temp = ((a_arry1[i]-'0')+carry)==2?0:((a_arry1[i]-'0')+carry); carry = ((a_arry1[i]-'0')+carry)==2?1:0; new_arry[i] = (char)('0'+temp); }else { new_arry[i] = a_arry1[i]; } i++; } while(i<b_len){ if(carry==1){ int temp = ((b_arry1[i]-'0')+carry)==2?0:((b_arry1[i]-'0')+carry); carry = ((b_arry1[i]-'0')+carry)==2?1:0; new_arry[i] = (char)('0'+temp); }else { new_arry[i] = b_arry1[i]; } i++; } //判断最高位是否为进位 if(carry == 1){ new_arry[i] = (char) (carry+'0'); i++; } //打印结果,输出字符串。 String result = ""; for(k=i-1;k>=0;k--){ result+=new_arry[k]; } return result; } }}
0 0
- LeetCode: Add Binary
- [Leetcode] Add Binary
- LeetCode Add Binary
- Leetcode: Add Binary
- [Leetcode] Add Binary
- LeetCode : Add Binary
- LeetCode Add Binary
- [LeetCode] Add Binary
- leetcode 58: Add Binary
- leetcode Add Binary
- [LeetCode] Add Binary
- 【leetcode】Add Binary
- [LeetCode]Add Binary
- [leetcode]Add Binary
- LeetCode-Add Binary
- [leetcode] Add Binary
- LeetCode - Add Binary
- leetcode:Add Binary
- 【ASP.NET】——有缘千里来相会
- Xcode软件软件中的一些常见单词翻译
- VC中创建不可改变大小的窗口,及其限制窗口大小的办法
- VC中dll的lib文件和dll有什么不同?
- android 视频录制 混淆打包 之native层 异常的解决
- LeetCode-Add Binary
- android 视频录制 混淆打包 之native层 异常的解决
- 获取本机通讯薄的内容
- 不同类型文件默认的颜色
- eclipse/myeclipse空间报错解决方法
- POJ 1995 快速幂
- Uva 208 Firetruck(dfs并查集优化)
- HTML在浏览器里的渲染原理
- VC下获取各个驱动器路径,分类及其获取其信息的资料整理