Skip to content

Commit 73790d4

Browse files
authored
Merge pull request #32 from Blazeboard/master
add some solutions in rust
2 parents f786e7b + 1640586 commit 73790d4

File tree

10 files changed

+270
-0
lines changed

10 files changed

+270
-0
lines changed

Rust/1.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2.5MB
23

4+
impl Solution {
5+
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
6+
use std::collections::HashMap;
7+
let mut hash = HashMap::new();
8+
for i in 0..nums.len() {
9+
if !hash.contains_key(&(target - nums[i])) {
10+
hash.insert(nums[i], i);
11+
} else {
12+
return vec![hash[&(target - nums[i])] as i32, i as i32];
13+
}
14+
}
15+
return vec![];
16+
}
17+
}
318
__________________________________________________________________________________________________
419

520
__________________________________________________________________________________________________

Rust/155.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,58 @@
11
__________________________________________________________________________________________________
2+
//runtime: 4ms, memory: 5.9MB
23

4+
struct MinStack {
5+
stack: Vec<i32>,
6+
min_stack: Vec<i32>,
7+
}
8+
9+
10+
/**
11+
* `&self` means the method takes an immutable reference.
12+
* If you need a mutable reference, change it to `&mut self` instead.
13+
*/
14+
impl MinStack {
15+
16+
fn new() -> Self {
17+
MinStack {
18+
stack: Vec::new(),
19+
min_stack: Vec::new(),
20+
}
21+
}
22+
23+
fn push(&mut self, val: i32) {
24+
self.stack.push(val);
25+
if self.min_stack.is_empty() || val <= *self.min_stack.last().unwrap() {
26+
self.min_stack.push(val);
27+
}
28+
}
29+
30+
fn pop(&mut self) {
31+
if self.min_stack.is_empty() {
32+
return;
33+
}
34+
if self.stack.pop().unwrap() == *self.min_stack.last().unwrap() {
35+
self.min_stack.pop();
36+
}
37+
}
38+
39+
fn top(&self) -> i32 {
40+
return *self.stack.last().unwrap();
41+
}
42+
43+
fn get_min(&self) -> i32 {
44+
return *self.min_stack.last().unwrap();
45+
}
46+
}
47+
48+
/**
49+
* Your MinStack object will be instantiated and called as such:
50+
* let obj = MinStack::new();
51+
* obj.push(val);
52+
* obj.pop();
53+
* let ret_3: i32 = obj.top();
54+
* let ret_4: i32 = obj.get_min();
55+
*/
356
__________________________________________________________________________________________________
457

558
__________________________________________________________________________________________________

Rust/206.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2.4MB
23

4+
// Definition for singly-linked list.
5+
// #[derive(PartialEq, Eq, Clone, Debug)]
6+
// pub struct ListNode {
7+
// pub val: i32,
8+
// pub next: Option<Box<ListNode>>
9+
// }
10+
//
11+
// impl ListNode {
12+
// #[inline]
13+
// fn new(val: i32) -> Self {
14+
// ListNode {
15+
// next: None,
16+
// val
17+
// }
18+
// }
19+
// }
20+
impl Solution {
21+
pub fn reverse_list(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
22+
let mut pre = None;
23+
let mut cur = head;
24+
while let Some(mut cur_node) = cur.take() {
25+
let next_temp = cur_node.next.take();
26+
cur_node.next = pre.take();
27+
pre = Some(cur_node);
28+
cur = next_temp;
29+
}
30+
pre
31+
}
32+
}
333
__________________________________________________________________________________________________
434

535
__________________________________________________________________________________________________

Rust/21.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,42 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2MB
23

4+
// Definition for singly-linked list.
5+
// #[derive(PartialEq, Eq, Clone, Debug)]
6+
// pub struct ListNode {
7+
// pub val: i32,
8+
// pub next: Option<Box<ListNode>>
9+
// }
10+
//
11+
// impl ListNode {
12+
// #[inline]
13+
// fn new(val: i32) -> Self {
14+
// ListNode {
15+
// next: None,
16+
// val
17+
// }
18+
// }
19+
// }
20+
impl Solution {
21+
pub fn merge_two_lists(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
22+
match (l1, l2) {
23+
(Some(node1), None) => Some(node1),
24+
(None, Some(node2)) => Some(node2),
25+
(Some(mut node1), Some(mut node2)) => {
26+
if node1.val < node2.val {
27+
let n = node1.next.take();
28+
node1.next = Solution::merge_two_lists(n, Some(node2));
29+
Some(node1)
30+
} else {
31+
let n = node2.next.take();
32+
node2.next = Solution::merge_two_lists(n, Some(node1));
33+
Some(node2)
34+
}
35+
}
36+
_ => None,
37+
}
38+
}
39+
}
340
__________________________________________________________________________________________________
441

542
__________________________________________________________________________________________________

Rust/26.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2.2MB
23

4+
impl Solution {
5+
pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {
6+
if nums.len() == 0 {
7+
return 0;
8+
}
9+
let mut i = 0;
10+
for j in 0..nums.len() {
11+
if nums[i] != nums[j] {
12+
if j - i > 1 {
13+
nums[i + 1] = nums[j];
14+
}
15+
i += 1;
16+
}
17+
}
18+
(i + 1) as i32
19+
}
20+
}
321
__________________________________________________________________________________________________
422

523
__________________________________________________________________________________________________

Rust/283.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
__________________________________________________________________________________________________
2+
//runtime: 4ms, memory: 2.2MB
23

4+
impl Solution {
5+
pub fn move_zeroes(nums: &mut Vec<i32>) {
6+
let mut i = 0;
7+
for j in 0..nums.len() {
8+
if nums[j] != 0 {
9+
nums[i] = nums[j];
10+
i += 1;
11+
}
12+
}
13+
for k in i..nums.len() {
14+
nums[k] = 0;
15+
}
16+
}
17+
}
318
__________________________________________________________________________________________________
419

520
__________________________________________________________________________________________________

Rust/51.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
11
__________________________________________________________________________________________________
2+
//runtime: 4ms, memory: 2.2MB
23

4+
impl Solution {
5+
pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
6+
let mut board = vec![vec!['.'; n as usize]; n as usize];
7+
let mut solution = vec![];
8+
backtrack(&mut board, &mut solution, n, 0);
9+
solution
10+
}
11+
}
12+
13+
fn backtrack(board: &mut Vec<Vec<char>>, solution: &mut Vec<Vec<String>>, n:i32, row: i32) {
14+
for column in 0..n {
15+
if !collision(&board, n, row, column) {
16+
board[row as usize][column as usize] = 'Q';
17+
if row == n - 1 {
18+
solution.push(board.iter().map(|vec| vec.iter().collect()).collect());
19+
} else {
20+
backtrack(board, solution, n, row + 1);
21+
}
22+
board[row as usize][column as usize] = '.';
23+
}
24+
}
25+
}
26+
27+
fn collision(board: &Vec<Vec<char>>, n: i32, row: i32, column: i32) ->bool {
28+
let mut up_row = row - 1;
29+
let mut left_column = column - 1;
30+
let mut right_column = column + 1;
31+
while up_row >= 0 {
32+
if board[up_row as usize][column as usize] == 'Q' {
33+
return true;
34+
}
35+
if left_column >= 0 && board[up_row as usize][left_column as usize] == 'Q' {
36+
return true;
37+
}
38+
if right_column < n && board[up_row as usize][right_column as usize] == 'Q' {
39+
return true;
40+
}
41+
up_row -= 1;
42+
left_column -= 1;
43+
right_column += 1;
44+
}
45+
false
46+
}
347
__________________________________________________________________________________________________
448

549
__________________________________________________________________________________________________

Rust/66.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2.1MB
23

4+
impl Solution {
5+
pub fn plus_one(mut digits: Vec<i32>) -> Vec<i32> {
6+
let mut i = digits.len() - 1;
7+
loop {
8+
if digits[i] < 9 {
9+
digits[i] += 1;
10+
return digits;
11+
}
12+
digits[i] = 0;
13+
if i > 0 {
14+
i -= 1;
15+
} else if i == 0 {
16+
break;
17+
}
18+
}
19+
digits = vec![0; digits.len() + 1];
20+
digits[0] = 1;
21+
return digits;
22+
}
23+
}
324
__________________________________________________________________________________________________
425

526
__________________________________________________________________________________________________

Rust/7.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
__________________________________________________________________________________________________
2+
//runtime: 0ms, memory: 2.1MB
23

4+
impl Solution {
5+
pub fn reverse(x: i32) -> i32 {
6+
let mut temp = x;
7+
let mut s: i32 = 0;
8+
while temp != 0 {
9+
match s.checked_mul(10) {
10+
None => return 0,
11+
Some(tem) => match tem.checked_add(temp % 10) {
12+
None => return 0,
13+
Some(tem1) => s = tem1,
14+
}
15+
}
16+
temp /= 10;
17+
}
18+
s
19+
}
20+
}
321
__________________________________________________________________________________________________
422

523
__________________________________________________________________________________________________

Rust/9.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
__________________________________________________________________________________________________
2+
//runtime: 4ms, memory: 2.1MB
23

4+
impl Solution {
5+
pub fn is_palindrome(x: i32) -> bool {
6+
if x < 0 {
7+
return false;
8+
}
9+
let mut temp = x;
10+
let mut s = 0;
11+
while temp != 0 {
12+
s = s * 10 + temp % 10;
13+
temp /= 10;
14+
}
15+
if s == x {
16+
return true;
17+
} else {
18+
return false;
19+
}
20+
}
21+
}
322
__________________________________________________________________________________________________
423

524
__________________________________________________________________________________________________

0 commit comments

Comments
 (0)