MCPcopy Create free account
hub / github.com/Ainevsia/Leetcode-Rust / add_binary

Method add_binary

67. Add Binary/src/main.rs:8–43  ·  view source on GitHub ↗
(a: String, b: String)

Source from the content-addressed store, hash-verified

6
7impl Solution {
8 pub fn add_binary(a: String, b: String) -> String {
9 let a = a.chars().collect::<Vec<char>>();
10 let b = b.chars().collect::<Vec<char>>();
11 let mut res = vec!['0'; usize::max(a.len(), b.len()) + 1];
12 let mut carry = false;
13 for i in (0..res.len()).rev() {
14 let offset = res.len() - i;
15 let p = if a.len() < offset { None } else { Some(a[a.len() - offset]) };
16 let q = if b.len() < offset { None } else { Some(b[b.len() - offset]) };
17 match (p, q) {
18 (Some(x), Some(y)) => {
19 match (x, y) {
20 ('0', '1') | ('1', '0') => {
21 if !carry { res[i] = '1'; carry = false }
22 }
23 ('0', '0') => {
24 if carry { res[i] = '1'; carry = false }
25 }
26 ('1', '1') => {
27 if carry { res[i] = '1' }
28 carry = true
29 }
30 _ => unreachable!()
31 }
32 }
33 (Some(x), None) | (None, Some(x)) => {
34 if carry && x == '0' { res[i] = '1'; carry = false }
35 else if !carry { res[i] = x }
36 }
37 _ => { if carry { res[i] = '1'; carry = false } }
38 }
39
40 }
41 if res[0] == '0' { res.remove(0); }
42 res.iter().collect()
43 }
44}
45
46#[cfg(test)]

Callers

nothing calls this directly

Calls 2

removeMethod · 0.80
iterMethod · 0.45

Tested by

no test coverage detected