您的位置:首页 > 编程语言 > Java开发

Leet Code 67 Add Binary - 二进制加法 - Java

2016-06-24 00:00 465 查看
摘要: Leet Code 67 Add Binary - 二进制加法 - Java

问题原始链接 https://leetcode.com/problems/add-binary

给定两个二进制字符串,以二进制字符串形式返回它们的和。

例如:a = "11",b = "1",返回 "100"。

public class Solution {
public static String addBinary(String a, String b) {
if (a == null || a.length() == 0) {
return b;
}
if (b == null || b.length() == 0) {
return a;
}

StringBuilder result = new StringBuilder(
Math.max(a.length(), b.length()) + 1);
int minLen = Math.min(a.length(), b.length());
int carry = addBinary(a, b, minLen, result);
if (a.length() > minLen) {
carry = addBinary(a, carry, a.length() - 1 - minLen, result);
} else if (b.length() > minLen) {
carry = addBinary(b, carry, b.length() - 1 - minLen, result);
}
if (carry > 0) {
result.append(carry);
}
return result.reverse().toString();
}

private static int addBinary(String a, String b, int len, StringBuilder result) {
int carry = 0;
for (int i = 0; i < len; i++) {
int d1 = Character.getNumericValue(a.charAt(a.length() - 1 - i));
int d2 = Character.getNumericValue(b.charAt(b.length() - 1 - i));
int x = d1 + d2 + carry;
int d = x % 2;
carry = x / 2;
result.append(d);
}
return carry;
}

private static int addBinary(String a, int carry, int start,
StringBuilder result) {
for (int i = start; i >= 0; i--) {
int d1 = Character.getNumericValue(a.charAt(i));
int x = d1 + carry;
int d = x % 2;
carry = x / 2;
result.append(d);
}
return carry;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息