当前位置: 面试刷题>> n皇后问题Ⅱ (经典算法题500道)


### 题目描述补充 **n皇后问题 II**:给定一个整数n,返回n皇后问题中不同的解决方案的数量。n皇后问题的目的是在n×n的棋盘上放置n个皇后,使得它们互不攻击。两个皇后互相攻击当且仅当: - 它们处于同一行; - 它们处于同一列; - 它们处于同一条对角线上。 ### 示例 **输入**: n = 4 **输出**: 2 **解释**: 存在两种不同的解法: ``` . Q . . . . . Q Q . . . . . Q . 和 . . Q . Q . . . . . . Q . Q . . ``` ### PHP 代码示例 ```php ``` ### Python 代码示例 ```python def totalNQueens(n): def backtrack(board, row, count): if row == n: count[0] += 1 return for col in range(n): if is_valid(board, row, col): board[row][col] = 'Q' backtrack(board, row + 1, count) board[row][col] = '.' def is_valid(board, row, col): for i in range(row): if board[i][col] == 'Q': return False if board[i][col - row + i] == 'Q' and col - row + i >= 0: return False if board[i][col + row - i] == 'Q' and col + row - i < n: return False return True board = [['.' for _ in range(n)] for _ in range(n)] count = [0] backtrack(board, 0, count) return count[0] # 示例用法 print(totalNQueens(4)) # 输出 2 ``` ### JavaScript 代码示例 ```javascript function totalNQueens(n) { let count = 0; const board = Array.from({ length: n }, () => Array(n).fill('.')); function backtrack(row) { if (row === n) { count++; return; } for (let col = 0; col < n; col++) { if (isValid(row, col)) { board[row][col] = 'Q'; backtrack(row + 1); board[row][col] = '.'; } } } function isValid(row, col) { for (let i = 0; i < row; i++) { if (board[i][col] === 'Q') return false; if (board[i][col - row + i] === 'Q' && col - row + i >= 0) return false; if (board[i][col + row - i] === 'Q' && col + row - i < n) return false; } return true; } backtrack(0); return count; } // 示例用法 console.log(totalNQueens(4)); // 输出 2 ``` **码小课**网站中有更多关于算法和数据结构的相关内容分享,欢迎大家学习交流。
推荐面试题