@@ -164,20 +164,23 @@ func addBinary(a string, b string) string {
164
164
165
165
``` ts
166
166
function addBinary(a : string , b : string ): string {
167
+ const n = Math .max (a .length , b .length );
167
168
const res = [];
168
- let i = a .length - 1 ;
169
- let j = b .length - 1 ;
170
169
let isOver = false ;
171
- while ( i > = 0 || j >= 0 || isOver ) {
172
- let sum = Number ( a [ i ] || 0 ) + Number ( b [ j ] || 0 ) + ( isOver ? 1 : 0 ) ;
170
+ for ( let i = 0 ; i < n || isOver ; i ++ ) {
171
+ let val = isOver ? 1 : 0 ;
173
172
isOver = false ;
174
- if (sum > 1 ) {
173
+ if (a [a .length - i - 1 ] === ' 1' ) {
174
+ val ++ ;
175
+ }
176
+ if (b [b .length - i - 1 ] === ' 1' ) {
177
+ val ++ ;
178
+ }
179
+ if (val > 1 ) {
175
180
isOver = true ;
176
- sum -= 2 ;
181
+ val -= 2 ;
177
182
}
178
- res .push (sum );
179
- i -- ;
180
- j -- ;
183
+ res .push (val );
181
184
}
182
185
return res .reverse ().join (' ' );
183
186
}
@@ -188,31 +191,28 @@ function addBinary(a: string, b: string): string {
188
191
``` rust
189
192
impl Solution {
190
193
pub fn add_binary (a : String , b : String ) -> String {
191
- let mut res = String :: new ();
192
- let a = a . as_bytes ();
193
- let b = b . as_bytes ();
194
- let mut i = a . len ();
195
- let mut j = b . len ();
194
+ let n = a . len (). max (b . len ());
195
+ let (a , b ) = (a . as_bytes (), b . as_bytes ());
196
+ let mut res = vec! [];
196
197
let mut is_over = false ;
197
- while i != 0 || j != 0 || is_over {
198
- let mut sum = if is_over { b '1' } else { b '0' };
199
- if i != 0 {
200
- sum += a [i - 1 ] - b '0' ;
201
- i -= 1 ;
198
+ let mut i = 0 ;
199
+ while i < n || is_over {
200
+ let mut val = if is_over { 1 } else { 0 };
201
+ is_over = false ;
202
+ if a . get (a . len () - i - 1 ). unwrap_or (& b '0' ) == & b '1' {
203
+ val += 1 ;
204
+ }
205
+ if b . get (b . len () - i - 1 ). unwrap_or (& b '0' ) == & b '1' {
206
+ val += 1 ;
202
207
}
203
- if j != 0 {
204
- sum += b [ j - 1 ] - b '0' ;
205
- j -= 1 ;
208
+ if val > 1 {
209
+ is_over = true ;
210
+ val -= 2 ;
206
211
}
207
- is_over = if sum > b '1' {
208
- sum -= b '2' - b '0' ;
209
- true
210
- } else {
211
- false
212
- };
213
- res . push (char :: from (sum ));
212
+ i += 1 ;
213
+ res . push (char :: from (b '0' + val ));
214
214
}
215
- res . chars (). rev (). collect ()
215
+ res . iter (). rev (). collect ()
216
216
}
217
217
}
218
218
```
0 commit comments