lc51_N皇后 免费退货?你网购退货的商品到去哪了?【TED演讲】 juicefs平滑升级 samba_ACL对文件系统的要求
Algorithm
lc51_N皇后
思路:
大一读书前看大学mooc上北大郭炜老师的c++课程的时候,就有讲到n皇后的解法。
其实第一层皇后放置的位置,影响着后面每一层的动态规划情况。
但是重新做这题,想不清怎么处理隔一层两层后的影响了,只想到暴力 O(n^n) 并且每次更新数组影响值的方法,重新学习一下。
看题解发现思路是一样的,然后就是可以用递归回溯+集合的方式存储列和正负斜率。
更机智的是状态压缩,斜率就用左右移位来扩散,优美啊。
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
|
impl Solution {
pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
let mut solutions = Vec::new();
let mut queens = vec![-1; n as usize];
let row = vec![".".to_string(); n as usize];
fn generate_board(queens: &Vec<i32>, n: usize, row: &Vec<String>) -> Vec<String> {
let mut board = Vec::new();
for &q in queens.iter() {
let mut r = row.clone();
r[q as usize] = "Q".to_string();
board.push(r.join(""));
}
board
}
fn solve(
row: usize,
columns: usize,
diagonals1: usize,
diagonals2: usize,
n: usize,
queens: &mut Vec<i32>,
solutions: &mut Vec<Vec<String>>,
row_pattern: &Vec<String>,
) {
if row == n {
let board = generate_board(queens, n, row_pattern);
solutions.push(board);
} else {
let mut available_positions = ((1 << n) - 1) & !(columns | diagonals1 | diagonals2);
while available_positions != 0 {
let position = available_positions & available_positions.wrapping_neg();
available_positions &= available_positions - 1;
let column = position.trailing_zeros() as usize;
queens[row] = column as i32;
solve(
row + 1,
columns | position,
(diagonals1 | position) << 1,
(diagonals2 | position) >> 1,
n,
queens,
solutions,
row_pattern,
);
}
}
}
solve(0, 0, 0, 0, n as usize, &mut queens, &mut solutions, &row);
solutions
}
}
|
Review
免费退货?你网购退货的商品到去哪了?【TED演讲】
直接退货造成物流反复发送,加上可能直接丢弃到垃圾填埋场。
所以演讲者提出绿色转发机制,AI评估品质,把退货退给下一个购买者,参与绿色购买的人可以获得绿色经济积分返现。
Tips
juicefs平滑升级
Share
samba 的 ACL 设置必须后端存储文件系统支持 acl , 否则会出很诡异的问题,可以用如下测试来判断后端是否支持:
The file system, the share will be created on, must support:
- user and system xattr name spaces.
- extended access control lists (ACL).
File_System_Support
文档里面的要求要认真看,否则会很惨痛.