67.[LeetCode]Add Binary
来源:互联网 发布:淘宝二手镜头靠谱吗 编辑:程序博客网 时间:2024/06/06 15:10
一开始我是有两个思路的,第一个是直接在字符位来计算,第二个是先转化为int整型,然后计算,再转换为String,这个想法 明显忽略掉 超过32的大数的可能。设计算法要考虑可能的范围
我的算法 : 耗时 6ms
public class Solution { public String addBinary(String a, String b) { // 先求出两个字符串哪个的位数比较长 int length_a = a.length(); int length_b = b.length(); String newNum = ""; // 给短的字符串补零 if(length_a > length_b){ char[] s_0 = new char[length_a - length_b]; Arrays.fill(s_0,'0'); String s = new String(s_0); b = s + b; length_b = b.length(); } else { char[] s_0 = new char[length_b - length_a]; Arrays.fill(s_0,'0'); String s = new String(s_0); a = s + a; length_a = a.length(); } // 计算 int carry = 0; int a_int=0,b_int=0; for(int i = length_a-1;i>=0;i--){ a_int = a.charAt(i)-'0'; b_int = b.charAt(i)-'0'; int sum = a_int+b_int+carry; int k = 0; switch(sum){ case 0: k = 0; carry = 0; break; case 1: k = 1; carry = 0; break; case 2: k = 0; carry = 1; break; case 3: k = 1; carry = 1; break; } // add k to string newNum = String.valueOf(k)+newNum; } if(carry == 1){ newNum = String.valueOf(1)+newNum; } return newNum; }}
在如何补零那里研究了一会,可以通过charset来初始化一个stirng,而一个charset可以用 Arrays.fill(charset,'x')
来填满
大神的代码,简洁干净,只要2ms
public class Solution { public String addBinary(String a, String b) { // 交换,使得a为长的,b为短的 // 这是一个很好的策略,在不知道那个是长的,哪个是短的情况下,不如先交换确定 String temp=""; if(a.length()<b.length()){ temp=a; a=b; b=temp; } // 我上面的方法是不断的使用charAt来获取字符串中的某一个字符,但是明显是先 转化为 字符数组 更加的高效 char[] arA=a.toCharArray(); char[] arB=b.toCharArray(); char[] arC=new char[a.length()+1]; int i=a.length()-1; int j=b.length()-1; int carry=0; int tempSum=0; while(i>=0){ if(j>=0){ tempSum=arA[i]-'0'+arB[j]-'0'+carry; --j; } else{ tempSum=arA[i]-'0'+carry; } carry=tempSum/2; arC[i+1]=(char)(tempSum%2+'0'); --i; } // 如果有进位,则返回全部,如果没有进位,则返回部分 arC[i+1]='1'; if(carry>0){ return String.valueOf(arC); } else{ return String.valueOf(arC).substring(1,a.length()+1); } }}
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
- UVALIVE 3525 Wild West <分类枚举 + 二分优化>
- AlertDialog的使用
- 欢迎使用CSDN-markdown编辑器
- myeclipse安装ant和ivy
- msp430g2553单片机学习心得
- 67.[LeetCode]Add Binary
- 不能用sendmsg提升原始套接字发送性能
- RDLC 设置表的重复标题行(在每页中显示标题行)
- C#对象深拷贝
- 切换Debug/Release编译模式和Archive的作用
- Linux软连接和硬链接
- pixhawk通信机制
- python内存管理
- Lua之class