Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
wa了很多次,進位考慮的不仔細。
package leetcode;
public class AddBinary {
public String addBinary(String a, String b) {
if (a.length() == 0) return b;
if (b.length() == 0) return a;
String ans = "";
char[] charA = a.toCharArray();
char[] charB = b.toCharArray();
int i = charA.length - 1;
int j = charB.length - 1;
int count = 0; //進位
while (i>=0 && j>=0){
String strTemp = addChar(charA[i],charB[j]);
if (count > 0){
if (strTemp.equals("10")){
count = 1;
ans = 1 + ans;
}else if (strTemp.equals("1")){
count = 1;
ans = 0 + ans;
}else{
count = 0;
ans = 1 + ans;
}
}else{
if (strTemp.equals("10")){
count = 1;
ans = 0 + ans;
}else if (strTemp.equals("1")){
count = 0;
ans = 1 + ans;
}else{
ans = 0 + ans;
}
}
i--;
j--;
//System.out.println(i+" "+j+" "+count+" "+ans+" "+strTemp);
}
if (count == 0){
if (i >= 0){
for (int temp = i; temp>=0; temp--){
ans = charA[temp] + ans;
}
}
if (j >= 0){
for (int temp = j; temp>=0; temp--){
ans = charB[temp] + ans;
}
}
}
if (count > 0){
int flag = 1;
if (i >= 0){
for (int temp = i; temp>=0; temp--){
//System.out.println(charA[temp] + "");
//System.out.println(flag + " "+ charA[temp]);
String strTemp = "";
if (flag == 1){
strTemp = addChar(charA[temp],'1');
}else{
strTemp = addChar(charA[temp],'0');
}
if (strTemp.equals("10")){
flag = 1;
ans = 0 + ans;
}else if (strTemp.equals("1")){
flag = 0;
ans = 1 + ans;
}else{
flag = 0;
ans = 0 + ans;
}
}
}
if (j >= 0){
for (int temp = j; temp>=0; temp--){
String strTemp = "";
if (flag == 1){
strTemp = addChar(charB[temp],'1');
}else{
strTemp = addChar(charB[temp],'0');
}
if (strTemp.equals("10")){
flag = 1;
ans = 0 + ans;
}else if (strTemp.equals("1")){
flag = 0;
ans = 1 + ans;
}else{
flag = 0;
ans = 0 + ans;
}
}
}
if (flag == 1) ans = 1 + ans;
count = 0;
}
//System.out.println(count + " " + ans);
if (count > 0) {
ans = 1 + ans;
}
return ans;
}
private String addChar(char c, char d) {
// TODO Auto-generated method stub
if (c + d == 98){
return "10";
}else if (c + d == 97){
return "1";
}else{
return "0";
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new AddBinary().addBinary("1111", "1111")); //11110
System.out.println(new AddBinary().addBinary("1010", "1011")); //10101
System.out.println(new AddBinary().addBinary("1", "1")); //10
System.out.println(new AddBinary().addBinary("1", "111")); //1000
System.out.println(new AddBinary().addBinary("1", "11")); //100
System.out.println(new AddBinary().addBinary("100", "110010")); //110110
System.out.println(new AddBinary().addBinary("10", "101111")); //110001
System.out.println(new AddBinary().addBinary("101111", "10")); //110001
//System.out.println(new AddBinary().addChar('1', '1'));
//System.out.println((char)a);
}
}