Skip to content

Commit bc89d49

Browse files
committed
q46
1 parent dde304d commit bc89d49

File tree

7 files changed

+196
-55
lines changed

7 files changed

+196
-55
lines changed

src/backtrace/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
mod q22;
1+
mod q22;
2+
mod q46;

src/backtrace/q22.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,6 @@ impl Solution {
3535
ret
3636
}
3737

38-
39-
fn check_legal(s: &str) -> bool {
40-
let mut clause = 0;
41-
for v in s.chars() {
42-
if v == '(' {
43-
clause += 1;
44-
} else {
45-
clause -= 1;
46-
}
47-
48-
if clause < 0 {
49-
return false;
50-
}
51-
};
52-
53-
println!("{:?}", clause==0);
54-
clause == 0
55-
}
56-
57-
5838
nest_function("(".to_owned(), 1, 0 ,n)
5939
}
6040

src/backtrace/q46.rs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
3+
4+
struct Solution ();
5+
impl Solution {
6+
pub fn permute(nums: Vec<i32>) -> Vec<Vec<i32>> {
7+
let mut ans: Vec<Vec<i32>> = vec![];
8+
let mut arr: Vec<i32> = vec![];
9+
Solution::backtrace(&nums, &mut arr, &mut ans);
10+
11+
12+
let mut ans = Solution::backtrace2(&nums, vec![]);
13+
return ans;
14+
}
15+
16+
17+
fn backtrace(nums: &Vec<i32>, arr: &mut Vec<i32>, ans: &mut Vec<Vec<i32>>) {
18+
19+
20+
21+
22+
if arr.len() == nums.len() {
23+
ans.push(arr.clone());
24+
} else {
25+
26+
for i in nums {
27+
if !arr.contains(i) {
28+
arr.push(*i);
29+
Solution::backtrace(nums, arr, ans);
30+
arr.pop();
31+
}
32+
}
33+
34+
35+
}
36+
}
37+
38+
fn backtrace2(nums: &Vec<i32>, arr: Vec<i32>) -> Vec<Vec<i32>> {
39+
let mut result = vec![];
40+
41+
if arr.len() == nums.len() {
42+
return vec![arr];
43+
}
44+
45+
for x in nums {
46+
if !arr.contains(x) {
47+
48+
let mut new_arr = arr.clone();
49+
new_arr.push(*x);
50+
result.append(&mut Solution::backtrace2(
51+
nums,
52+
new_arr
53+
));
54+
}
55+
}
56+
57+
result
58+
59+
}
60+
61+
62+
}
63+
64+
65+
66+
67+
#[cfg(test)]
68+
mod tests {
69+
use super::*;
70+
71+
#[test]fn test_ok() {
72+
73+
println!("{:?}", Solution::permute(vec![1,2,3]))
74+
75+
}
76+
}

src/dp/mod.rs

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,2 @@
11
mod q121;
22

3-
4-
struct Solution ();
5-
impl Solution {
6-
pub fn max_profit(prices: Vec<i32>) -> i32 {
7-
8-
let mut max = 0;
9-
let mut min_item = prices[0];
10-
11-
12-
for x in prices.into_iter().skip(1) {
13-
min_item = min_item.min(x);
14-
max = max.max(x - min_item);
15-
16-
17-
}
18-
19-
20-
max
21-
}
22-
}
23-
24-
25-
26-
#[cfg(test)]
27-
mod tests {
28-
use super::*;
29-
30-
#[test] fn is_ok() {
31-
32-
assert_eq!(Solution::max_profit(vec![7,1,5,3,6,4]), 5)
33-
34-
35-
}
36-
}

src/dp/q121.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
struct Solution ();
3+
impl Solution {
4+
pub fn max_profit(prices: Vec<i32>) -> i32 {
5+
6+
let mut max = 0;
7+
let mut min_item = prices[0];
8+
9+
10+
for x in prices.into_iter().skip(1) {
11+
min_item = min_item.min(x);
12+
max = max.max(x - min_item);
13+
14+
15+
}
16+
17+
18+
max
19+
}
20+
}
21+
22+
23+
24+
#[cfg(test)]
25+
mod tests {
26+
use super::*;
27+
28+
#[test] fn is_ok() {
29+
30+
assert_eq!(Solution::max_profit(vec![7,1,5,3,6,4]), 5)
31+
32+
33+
}
34+
}

src/linklist/mod.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
2+
#[derive(Debug)]
3+
pub struct ListNode {
4+
pub val: i32,
5+
pub next: Option<Box<ListNode>>
6+
}
7+
8+
9+
impl ListNode {
10+
fn new(val: i32) -> ListNode {
11+
ListNode {
12+
val,
13+
next: None
14+
}
15+
}
16+
}
17+
18+
19+
20+
21+
#[macro_export]
22+
macro_rules! linklist {
23+
() => {
24+
None
25+
};
26+
($($e:expr), *) => {
27+
{
28+
let mut head = Box::new(ListNode::new(0));
29+
let mut ref_head = &mut head;
30+
31+
$(
32+
ref_head.next = Some(Box::new(ListNode::new($e)));
33+
ref_head = ref_head.next.as_mut().unwrap();
34+
)*
35+
36+
let _ = ref_head; // 避免 `unused_assignments`
37+
head.next
38+
}
39+
};
40+
}
41+
42+
mod q203;

src/linklist/q203.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use super::*;
2+
3+
struct Solution();
4+
impl Solution {
5+
pub fn remove_elements(head: Option<Box<ListNode>>, val: i32) -> Option<Box<ListNode>> {
6+
let mut head = Some(Box::new(ListNode{
7+
val: val-1,
8+
next: head
9+
}));
10+
11+
let mut node = &mut head;
12+
13+
'outer:
14+
while let Some(ptr) = node {
15+
while let Some(ptr2) = &mut ptr.next {
16+
if ptr2.val == val {
17+
ptr.next = ptr2.next.take();
18+
} else {
19+
node = &mut ptr.next;
20+
continue 'outer;
21+
}
22+
}
23+
break;
24+
}
25+
26+
head.unwrap().next
27+
}
28+
}
29+
30+
31+
#[cfg(test)]
32+
mod tests {
33+
use super::*;
34+
35+
#[test] fn common_test() {
36+
let mut v = linklist!(1,2,3, 3);
37+
println!("{:?}", Solution::remove_elements(v, 3))
38+
39+
}
40+
41+
42+
}

0 commit comments

Comments
 (0)