Leetcode - Add Binary
2016-04-17 22:55
381 查看
Question
Given two binary strings, return their sum (also a binary string).For example,
a = “11”
b = “1”
Return “100”.
JavaCode
public String addBinary(String a, String b) { //选择较长的String用于存储相加的结果 StringBuffer l = new StringBuffer(); String s = null; if(a.length() > b.length()) { l.append(a); s = b; }else { l.append(b); s = a; } boolean carry = false;//标记每次低位相加之后是否有进位 int diff = l.length() - s.length(); char ch1, ch2; //计算两个二进制数各个对应数位之和 for(int i = l.length() - 1; i >= diff; --i) { ch1 = l.charAt(i); ch2 = s.charAt(i-diff); if(ch1 == '1' && ch2 == '1') { if (!carry) {//如果低位没有进位 carry = true;//则本次相加之后产生进位 l.setCharAt(i, '0');//保存当前二进制位相加的结果 }//如果低位有进位,则相加之后仍有进位(本逻辑分支无需任何操作) }else if(ch1 == '0' && ch2 == '0'){ if (carry) { carry = false; l.setCharAt(i, '1'); } }else { if (carry) { if(ch1 == '1') l.setCharAt(i, '0'); }else if(ch1 == '0'){ l.setCharAt(i, '1'); } } } //处理较长的加数中可能的连续进位 while(diff-- > 0){ if(carry) { if(l.charAt(diff) == '1') l.setCharAt(diff, '0'); else { l.setCharAt(diff, '1'); carry = false; break;//没有进位则结束继续进位的操作 } } } //处理最高位上可能的进位并返回相加结果 if(carry) return l.insert(0, '1').toString(); else return l.toString(); }
说明
如果本题中输入的两个二进制字符串不太长(测试用例并未保证如此),则可以使用基本数据类型的包装类直接进行解析和转换,代码将很简洁:public String addBinary(String a, String b) { return Long.toBinaryString(Long.parseLong(a, 2) + Long.parseLong(b, 2)); }
相关文章推荐
- javascript add event remove event
- IE不支持option的display样式,只能使用remove和add
- MYSQL的binary解决mysql数据大小写敏感问题的方法
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- 处理使用MariaDB做级联复制遇到的error 1666
- sql创建5类约束
- The Difference Between “Add Web Reference” and “Add Service Reference”
- leetcode----Longest Substring Without Repeating Characters
- Add DHCP Reservations in a batch with a Script
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem