mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge pull request #1541 from cezarbbb/Backtracking09
添加 0051.N皇后 Rust版本
This commit is contained in:
@ -558,6 +558,56 @@ func solveNQueens(_ n: Int) -> [[String]] {
|
||||
}
|
||||
```
|
||||
|
||||
### Rust
|
||||
|
||||
```Rust
|
||||
impl Solution {
|
||||
fn is_valid(row: usize, col: usize, chessboard: &mut Vec<Vec<char>>, n: usize) -> bool {
|
||||
let mut i = 0 as usize;
|
||||
while i < row {
|
||||
if chessboard[i][col] == 'Q' { return false; }
|
||||
i += 1;
|
||||
}
|
||||
let (mut i, mut j) = (row as i32 - 1, col as i32 - 1);
|
||||
while i >= 0 && j >= 0 {
|
||||
if chessboard[i as usize][j as usize] == 'Q' { return false; }
|
||||
i -= 1;
|
||||
j -= 1;
|
||||
}
|
||||
let (mut i, mut j) = (row as i32 - 1, col as i32 + 1);
|
||||
while i >= 0 && j < n as i32 {
|
||||
if chessboard[i as usize][j as usize] == 'Q' { return false; }
|
||||
i -= 1;
|
||||
j += 1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
fn backtracking(result: &mut Vec<Vec<String>>, n: usize, row: usize, chessboard: &mut Vec<Vec<char>>) {
|
||||
if row == n {
|
||||
let mut chessboard_clone: Vec<String> = Vec::new();
|
||||
for i in chessboard {
|
||||
chessboard_clone.push(i.iter().collect::<String>());
|
||||
}
|
||||
result.push(chessboard_clone);
|
||||
return;
|
||||
}
|
||||
for col in 0..n {
|
||||
if Self::is_valid(row, col, chessboard, n) {
|
||||
chessboard[row][col] = 'Q';
|
||||
Self::backtracking(result, n, row + 1, chessboard);
|
||||
chessboard[row][col] = '.';
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
|
||||
let mut result: Vec<Vec<String>> = Vec::new();
|
||||
let mut chessboard: Vec<Vec<char>> = vec![vec!['.'; n as usize]; n as usize];
|
||||
Self::backtracking(&mut result, n as usize, 0, &mut chessboard);
|
||||
result
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### C
|
||||
```c
|
||||
char ***ans;
|
||||
|
Reference in New Issue
Block a user