-
Notifications
You must be signed in to change notification settings - Fork 0
/
lib.rs
78 lines (69 loc) · 1.61 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#[macro_export]
macro_rules! vec2d {
($($arr:tt),*) => { // handle sets
{
let mut ret= Vec::new();
$(ret.push(vec!$arr);)*
ret
}
};
}
#[macro_export]
macro_rules! min {
($x: expr) => ($x);
($x: expr, $($z: expr),+) => (::std::cmp::min($x, min!($($z),*)));
}
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct ListNode {
pub val: i32,
pub next: Option<Box<ListNode>>,
}
impl ListNode {
#[inline]
pub fn new(val: i32) -> Self {
ListNode { next: None, val }
}
// pub fn push(&mut self, val: i32) -> Self {
// let node = ListNode::new(val);
// // self.next = Some(node);
// let ptr = self;
// while let Some(next) = ptr.next {
// ptr = next.as_mut();
// }
// // self = node;
// // self
// *self
// }
}
#[macro_export]
macro_rules! list {
($($arr:tt),*) => { // handle sets
{
let mut ret= ListNode::new();
let head = &ret;
$(ret.push($arr);)*
Some(Box::new(*head))
}
};
}
/// 为了 dfs 中,数组的 index 加上下左右
pub fn u_add_i(u: usize, i: isize, max: usize) -> Option<usize> {
if i < 0 {
let ret = u.checked_sub(-i as usize);
ret.and_then(|v| if v < max { Some(v) } else { None })
} else {
let ret = u + i as usize;
if ret < max {
Some(ret)
} else {
None
}
}
}
pub fn add(u: usize, i: i32) -> usize {
if i.is_negative() {
u - i.wrapping_abs() as u32 as usize
} else {
u + i as usize
}
}