Skip to content

Commit da3b6c4

Browse files
authored
Merge pull request #2444 from tedkimdev/tedkimdev/week3
[tedkimdev] WEEK 03 Solutions
2 parents 8995ef6 + c911f4e commit da3b6c4

File tree

5 files changed

+115
-0
lines changed

5 files changed

+115
-0
lines changed

combination-sum/tedkimdev.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// SC: O(2^t/m)
2+
// TC: O(t/m)
3+
impl Solution {
4+
pub fn combination_sum(nums: Vec<i32>, target: i32) -> Vec<Vec<i32>> {
5+
let mut res: Vec<Vec<i32>> = vec![];
6+
7+
fn dfs(nums: &[i32], target: i32, i: usize, cur: &mut Vec<i32>, mut sum: i32, res: &mut Vec<Vec<i32>>) {
8+
if sum == target {
9+
res.push(cur.clone());
10+
return;
11+
}
12+
if i >= nums.len() || sum > target {
13+
return;
14+
}
15+
16+
sum += nums[i];
17+
cur.push(nums[i]);
18+
dfs(nums, target, i, cur, sum, res);
19+
20+
sum -= nums[i];
21+
cur.pop();
22+
dfs(nums, target, i+1, cur, sum, res);
23+
}
24+
25+
dfs(&nums, target, 0, &mut vec![], 0, &mut res);
26+
27+
res
28+
}
29+
}

decode-ways/tedkimdev.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SC: O(t/m) -> maximum recursion depth
2+
// TC: O(2^(t/m))
3+
// t = target value
4+
// m = smallest number in nums
5+
// t/m = maximum number of elements in a combination
6+
impl Solution {
7+
pub fn num_decodings(s: String) -> i32 {
8+
if s.starts_with('0') {
9+
return 0;
10+
}
11+
12+
// dfs
13+
fn dfs(s: &str) -> i32 {
14+
if s.is_empty() {
15+
return 1;
16+
}
17+
18+
let mut output = 0;
19+
if s[..1].parse::<i32>().unwrap() != 0 {
20+
output += dfs(&s[1..]);
21+
}
22+
if s.len() >= 2 && !s[..2].starts_with('0') {
23+
if s[..2].parse::<i32>().unwrap() > 26 {
24+
return output;
25+
} else {
26+
output += dfs(&s[2..]);
27+
}
28+
}
29+
output
30+
}
31+
dfs(&s)
32+
}
33+
34+
}

maximum-subarray/tedkimdev.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// SC: O(1)
2+
// TC: O(n)
3+
impl Solution {
4+
pub fn max_sub_array(nums: Vec<i32>) -> i32 {
5+
let mut max_sub = nums[0];
6+
let mut cur_sum = 0;
7+
for &num in &nums {
8+
if cur_sum < 0 {
9+
cur_sum = 0;
10+
}
11+
cur_sum += num;
12+
max_sub = max_sub.max(cur_sum);
13+
}
14+
max_sub
15+
}
16+
}

number-of-1-bits/tedkimdev.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// TC: O(1)
2+
// SC: O(1)
3+
impl Solution {
4+
pub fn hamming_weight(n: u32) -> i32 {
5+
let mut count: i32 = 0;
6+
for i in 0..32 {
7+
if n & (1u32 << i) != 0 {
8+
count += 1;
9+
}
10+
}
11+
count
12+
}
13+
}

valid-palindrome/tedkimdev.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// TC: O(n)
2+
// SC: O(1)
3+
impl Solution {
4+
pub fn is_palindrome(s: String) -> bool {
5+
let s = s.as_bytes();
6+
let (mut l, mut r) = (0i32, s.len() as i32 - 1);
7+
8+
while l < r {
9+
while l < r && !s[l as usize].is_ascii_alphanumeric() {
10+
l += 1;
11+
}
12+
while r > l && !s[r as usize].is_ascii_alphanumeric() {
13+
r -= 1;
14+
}
15+
if s[l as usize].to_ascii_lowercase() != s[r as usize].to_ascii_lowercase() {
16+
return false;
17+
}
18+
l += 1;
19+
r -= 1;
20+
}
21+
true
22+
}
23+
}

0 commit comments

Comments
 (0)