Skip to content

Commit e153157

Browse files
author
tanfanhua
committed
left
1 parent 3934f0d commit e153157

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/com/blankj/easy/_0067/Solution.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,51 @@ public String addBinary(String a, String b) {
4949
public static void main(String[] args) {
5050
Solution solution = new Solution();
5151
System.out.println(solution.addBinary("11", "1"));
52+
System.out.println(solution.myAddBinary("11", "1"));
53+
System.out.println(solution.addBinary("11", "111"));
54+
System.out.println(solution.myAddBinary("11", "111"));
55+
System.out.println(solution.addBinary("101", "1110"));
56+
System.out.println(solution.myAddBinary("101", "1110"));
57+
58+
}
59+
60+
public String myAddBinary(String a, String b) {
61+
if (a == null || a.length() == 0) {
62+
return b;
63+
}
64+
if (b == null || b.length() == 0) {
65+
return null;
66+
}
67+
StringBuilder sb = new StringBuilder();
68+
int aLength = a.length();
69+
int bLength = b.length();
70+
int minLength = Math.min(aLength, bLength);
71+
int carry = 0;
72+
for (int i = 0; i < minLength; i++) {
73+
char aChar = a.charAt(aLength - 1 - i);
74+
char bChar = b.charAt(bLength - 1 - i);
75+
carry += aChar - '0' + bChar - '0';
76+
sb.insert(0, (char)('0' + carry % 2));
77+
carry >>= 1;
78+
}
79+
String leftStr = a;
80+
if (aLength < bLength) {
81+
leftStr = b;
82+
}
83+
carry = addLeft(sb, leftStr, minLength, carry);
84+
if (carry != 0) {
85+
sb.insert(0, '1');
86+
}
87+
return sb.toString();
88+
}
89+
90+
private int addLeft(StringBuilder sb, String leftStr, int minLength, int carry) {
91+
for (int i = minLength; i < leftStr.length(); i++) {
92+
char aChar = leftStr.charAt(leftStr.length() - 1 - i);
93+
carry += aChar - '0';
94+
sb.insert(0, (char)('0' + carry % 2));
95+
carry >>= 1;
96+
}
97+
return carry;
5298
}
5399
}

0 commit comments

Comments
 (0)