Skip to content

Commit 2a39151

Browse files
committed
Add leetcode problem 735
1 parent 935fccb commit 2a39151

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
struct Solution;
2+
3+
impl Solution {
4+
pub fn asteroid_collision(asteroids: Vec<i32>) -> Vec<i32> {
5+
let mut st = Vec::new();
6+
for asteroid in asteroids {
7+
if asteroid < 0 {
8+
while let Some(&top) = st.last() {
9+
if top > 0 && top + asteroid < 0 {
10+
st.pop();
11+
} else {
12+
break;
13+
}
14+
}
15+
if let Some(&top) = st.last() {
16+
if top > 0 {
17+
match top + asteroid {
18+
0 => {
19+
st.pop();
20+
continue;
21+
}
22+
x if x > 0 => continue,
23+
_ => (),
24+
}
25+
}
26+
}
27+
}
28+
st.push(asteroid);
29+
}
30+
st
31+
}
32+
}
33+
34+
#[cfg(test)]
35+
mod tests {
36+
use super::*;
37+
38+
#[test]
39+
fn test() {
40+
let asteroids = vec![5, 10, -5];
41+
assert_eq!(Solution::asteroid_collision(asteroids), vec![5, 10]);
42+
43+
let asteroids = vec![8, -8];
44+
assert_eq!(Solution::asteroid_collision(asteroids), vec![]);
45+
46+
let asteroids = vec![10, 2, -5];
47+
assert_eq!(Solution::asteroid_collision(asteroids), vec![10]);
48+
49+
let asteroids = vec![-2, -1, 1, 2];
50+
assert_eq!(Solution::asteroid_collision(asteroids), vec![-2, -1, 1, 2]);
51+
}
52+
}

leetcode/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,3 +1412,6 @@ mod find_eventual_safe_states;
14121412

14131413
#[path = "00435_non_overlapping_intervals/solution.rs"]
14141414
mod non_overlapping_intervals;
1415+
1416+
#[path = "00735_asteroid_collision/solution.rs"]
1417+
mod asteroid_collision;

0 commit comments

Comments
 (0)