52. N-Queens II
Tags:
Hard
Skills:
backtrack
June 24, 2025
04:32 AM
No headings found
Loading content...
Related Posts
Leetcode
No headings found
Related Posts
Leetcode
Problem
Bài toán yêu cầu đếm số cách đặt n quân hậu trên bàn cờ n x n sao cho không có hai quân hậu nào ăn nhau (không cùng hàng, cột hoặc chéo)
Approach
Ý tưởng tối ưu là sử dụng backtrack
Các biến cần thiêt
cols : Đánh dấu các cột đã đặt quân hậudiag1 : Đánh dấu đường chéo chính (row + col)diag2 : Đánh dấu đường chéo phụ (col - row+ n - 1)Time and space complexity
n x (n - 1) x (n - 2) .... x 1 = n! Solution
1function totalNQueens(n: number): number {
2 let count = 0;
3 const cols = new Array(n).fill(false)
4 const diag1 = new Array(2 * n - 1).fill(false)
5 const diag2 = new Array(2 * n - 1).fill(false)
6 function backtrack(row: number) {
7 if(row === n) {
8 count++;
9 return;
10 }
11
12 for(let col = 0; col < n; col++) {
13 const main_diag = row + col;
14 const sub_diag = col - row + (n - 1)
15
16 if(cols[col] || diag1[main_diag] || diag2[sub_diag]) continue;
17 cols[col] = diag1[main_diag] = diag2[sub_diag] = true;
18 backtrack(row + 1)
19 cols[col] = diag1[main_diag] = diag2[sub_diag] = false;
20 }
21 }
22 backtrack(0)
23 return count;
24};2 * n - 1 ?row + col . Giá trị này chạy từ 0 (góc trên bên trái) đến 2n - 2 (góc dưới bên phải), nên cần mảng độ dài 2n - 1 col - row + (n - 1) . Giá trị này chạy từ 0 (góc bên trái) đến 2n - 2 (góc dưới bên phải mảng), nên cần mảng độ dài 2n - 1