diff --git a/problems/complex-number-multiplication.rs b/problems/complex-number-multiplication.rs new file mode 100644 index 0000000..9e798a1 --- /dev/null +++ b/problems/complex-number-multiplication.rs @@ -0,0 +1,42 @@ +use std::fmt; +use std::str::FromStr; + +#[derive(Debug, PartialEq)] +struct Complex { + real: i32, + imag: i32, +} + +#[derive(Debug)] +struct InvalidComplex; + +impl FromStr for Complex { + type Err = InvalidComplex; + + fn from_str(input: &str) -> Result { + let parts: Vec<&str> = input.split('+').collect(); + let real = parts[0].parse::().unwrap(); + let imag = parts[1].trim_end_matches('i').parse::().unwrap(); + + Ok(Complex { real, imag }) + } +} + +impl fmt::Display for Complex { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}+{}i", self.real, self.imag) + } +} + +impl Solution { + pub fn complex_number_multiply(num1: String, num2: String) -> String { + let left: Complex = num1.parse().unwrap(); + let right: Complex = num2.parse().unwrap(); + + (Complex { + real: left.real * right.real - left.imag * right.imag, + imag: left.real * right.imag + left.imag * right.real, + }) + .to_string() + } +} diff --git a/problems/contains-duplicate.swift b/problems/contains-duplicate.swift new file mode 100644 index 0000000..5d9a997 --- /dev/null +++ b/problems/contains-duplicate.swift @@ -0,0 +1,12 @@ +class Solution { + func containsDuplicate(_ nums: [Int]) -> Bool { + var encountered = Set() + for x in nums { + if encountered.contains(x) { + return true + } + encountered.insert(x) + } + return false + } +} diff --git a/problems/number-complement.swift b/problems/number-complement.swift new file mode 100644 index 0000000..ee4850b --- /dev/null +++ b/problems/number-complement.swift @@ -0,0 +1,13 @@ +class Solution { + func findComplement(_ num: Int) -> Int { + if num == 0 { + return 0; + } + + if num & 1 != 0 { + return findComplement(num >> 1) << 1; + } + + return (findComplement(num >> 1) << 1) + 1; + } +}