67. Add Binary
原题链接:https://leetcode.com/problems/add-binary/description/
哎,直接看代码吧:
/**
* Created by clearbug on 2018/2/26.
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.addBinary1("1", "11"));
System.out.println(s.addBinary1("10", "11"));
System.out.println(s.addBinary2("1", "11"));
System.out.println(s.addBinary2("10", "11"));
}
/**
* 我自己的解法,又他么是猪一样的思路。。。
*
* @param a
* @param b
* @return
*/
public String addBinary1(String a, String b) {
StringBuilder res = new StringBuilder("");
char[] aChars = a.toCharArray();
char[] bChars = b.toCharArray();
boolean carry = false;
int i = aChars.length - 1, j = bChars.length - 1;
while (i >= 0 && j>= 0) {
if (carry) {
if (aChars[i] == '1' && bChars[j] == '1') {
res.append('1');
} else if (aChars[i] == '0' && bChars[j] == '0') {
carry = false;
res.append('1');
} else {
res.append('0');
}
} else {
if (aChars[i] == '1' && bChars[j] == '1') {
carry = true;
res.append('0');
} else if (aChars[i] == '0' && bChars[j] == '0') {
res.append('0');
} else {
res.append('1');
}
}
i--;
j--;
}
if (i == -1) {
while (j >= 0) {
if (carry) {
if (bChars[j] == '1') {
res.append('0');
} else {
carry = false;
res.append('1');
}
} else {
res.append(bChars[j]);
}
j--;
}
} else {
while (i >= 0) {
if (carry) {
if (aChars[i] == '1') {
res.append('0');
} else {
carry = false;
res.append('1');
}
} else {
res.append(aChars[i]);
}
i--;
}
}
if (carry) {
res.append("1");
}
return res.reverse().toString();
}
/**
* 官方讨论区别人的答案,确实是简洁优雅
*
* @param a
* @param b
* @return
*/
public String addBinary2(String a, String b) {
StringBuilder res = new StringBuilder("");
int carry = 0;
int i = a.length() - 1;
int j = b.length() - 1;
while (i >= 0 || j >= 0) {
int sum = carry;
if (i >= 0) {
sum += a.charAt(i--) - '0';
}
if (j >= 0) {
sum += b.charAt(j--) - '0';
}
carry = sum / 2;
res.append(sum % 2);
}
if (carry != 0) {
res.append(carry);
}
return res.reverse().toString();
}
}