Skip to content

Commit 6dfd3bc

Browse files
authored
Merge pull request #2228 from ThBlitz/main
Create: 0051-n-queens.rs
2 parents 7574a11 + 950a63a commit 6dfd3bc

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ If you would like to have collaborator permissions on the repo to merge your own
273273
<sub>[1980 - Find Unique Binary String](https://leetcode.com/problems/find-unique-binary-string/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F1980-find-unique-binary-string.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F1980-Find-Unique-Binary-String.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
274274
<sub>[1239 - Maximum Length of a Concatenated String With Unique Characters](https://leetcode.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](python%2F1239-Maximum-Length-of-a-Concatenated-String-with-Unique-Characters.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
275275
<sub>[0698 - Partition to K Equal Sum Subsets](https://leetcode.com/problems/partition-to-k-equal-sum-subsets/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0698-partition-to-k-equal-sum-subsets.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0698-partition-to-k-equal-sum-subsets.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
276-
<sub>[0051 - N Queens](https://leetcode.com/problems/n-queens/)</sub> | <sub><div align='center'>[✔️](c%2F0051-n-queens.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0051-n-queens.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0051-n-queens.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0051-n-queens.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0051-n-queens.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0051-n-queens.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0051-n-queens.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0051-n-queens.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'></div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0051-n-queens.ts)</div></sub>
276+
<sub>[0051 - N Queens](https://leetcode.com/problems/n-queens/)</sub> | <sub><div align='center'>[✔️](c%2F0051-n-queens.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0051-n-queens.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0051-n-queens.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0051-n-queens.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0051-n-queens.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0051-n-queens.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0051-n-queens.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0051-n-queens.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](rust%2F0051-n-queens.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0051-n-queens.ts)</div></sub>
277277
<sub>[0052 - N Queens II](https://leetcode.com/problems/n-queens-ii/)</sub> | <sub><div align='center'>[✔️](c%2F0052-n-queens-ii.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0052-n-queens-ii.cpp)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](javascript%2F0052-n-queens-ii.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0052-n-queens-ii.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0052-n-queens-ii.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
278278

279279
### Graphs

rust/0051-n-queens.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
impl Solution {
3+
4+
pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
5+
6+
let mut chessboard: Vec<Vec<i8>> = vec![vec![0;n as usize]; n as usize];
7+
let mut result: Vec<Vec<String>> = Vec::new();
8+
let directions: Vec<(isize, isize)> = vec!((-1, 1), (1, 1), (1, -1), (-1, -1));
9+
10+
fn toggle_queen(row: usize, col: usize, chessboard: &mut Vec<Vec<i8>>, directions: &Vec<(isize, isize)>, toggle: i8) {
11+
12+
for i in 0..chessboard.len() { chessboard[row][i] += toggle };
13+
for j in 0..chessboard.len() { chessboard[j][col] += toggle };
14+
15+
for dir in directions {
16+
let mut i = row as isize + dir.0;
17+
let mut j = col as isize + dir.1;
18+
while i >= 0 && i < chessboard.len() as isize && j >= 0 && j < chessboard.len() as isize {
19+
chessboard[i as usize][j as usize] += toggle;
20+
i += dir.0;
21+
j += dir.1;
22+
}
23+
}
24+
chessboard[row][col] -= 3 * toggle;
25+
}
26+
27+
fn copy_board(chessboard: &Vec<Vec<i8>>) -> Vec<String> {
28+
let mut copy: Vec<char> = vec!['.'; chessboard.len()];
29+
let mut board: Vec<String> = Vec::with_capacity(chessboard.len());
30+
for i in 0..chessboard.len() {
31+
for j in 0..chessboard.len() {
32+
if chessboard[i][j] == -1 { copy[j] = 'Q' } else { copy[j] = '.' };
33+
}
34+
board.push(copy.iter().collect());
35+
}
36+
return board;
37+
}
38+
39+
fn backtrack( chessboard: &mut Vec<Vec<i8>>, result: &mut Vec<Vec<String>>, row: usize, directions: &Vec<(isize, isize)>) {
40+
if row == chessboard.len() {
41+
result.push(copy_board(&chessboard));
42+
return;
43+
}
44+
45+
for col in 0..chessboard.len() {
46+
if chessboard[row][col] == 0 {
47+
toggle_queen(row, col, chessboard, directions, 1);
48+
backtrack(chessboard, result, row + 1, directions);
49+
toggle_queen(row, col, chessboard, directions, -1);
50+
}
51+
}
52+
return;
53+
}
54+
55+
56+
backtrack(&mut chessboard, &mut result, 0, &directions);
57+
return result;
58+
}
59+
}

0 commit comments

Comments
 (0)