首页 > 代码库 > [LeetCode]Add Binary
[LeetCode]Add Binary
题目:给定两个二进制数字字符串A、B,计算出A+B并返回和值的字符串
算法一:最原始的办法,模拟二进制的运算,因考虑到给定的二进制字符串很长,所以使用Java的BigInteger实现
import java.math.BigInteger; public class Solution { /** * Convert binary number to BigInteger. * @param binary * @return */ public BigInteger convertBinaryToBigInteger(String binary) { BigInteger factor = BigInteger.ONE; BigInteger convert = BigInteger.ZERO; int length = binary.length(); for (int i=length-1; i>=0; --i) { long num = (long)(binary.charAt(i)-'0'); convert = convert.add(factor.multiply(BigInteger.valueOf(num))); factor = factor.shiftLeft(1); } return convert; } /** * Convert BigInteger to binary number. * @param c * @return */ public String convertBigIntegerToBinary(BigInteger c) { if (c.equals(BigInteger.ZERO)) { return "0"; } String res = new String(); BigInteger factor = BigInteger.valueOf(2L); while (!c.equals(BigInteger.ZERO)) { res += c.mod(factor).toString(); c = c.divide(factor); } return new StringBuffer(res).reverse().toString(); } /** * Add Two given binary number and return the binary number of their sum. * @param a * @param b * @return */ public String addBinary(String a, String b) { BigInteger aBigInteger = convertBinaryToBigInteger(a); BigInteger bBigInteger = convertBinaryToBigInteger(b); return convertBigIntegerToBinary(aBigInteger.add(bBigInteger)); } }
算法二:利用异或运算,这种方法更加优雅
public String addBinary(String a, String b) { String convert = new String(); char[] aArray = a.toCharArray(); char[] bArray = b.toCharArray(); int aByte = 0; int bByte = 0; int carry = 0; int aIndex = aArray.length - 1; int bIndex = bArray.length - 1; while (aIndex>-1 || bIndex>-1 || carry>0) { aByte = aIndex > -1 ? Character.getNumericValue(aArray[aIndex--]) : 0; bByte = bIndex > -1 ? Character.getNumericValue(bArray[bIndex--]) : 0; convert += String.valueOf(aByte ^ bByte ^ carry); carry = (aByte + bByte + carry) > 1 ? 1 : 0; }// end of while return new StringBuffer(convert).reverse().toString(); }
[LeetCode]Add Binary
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。