LeetCode 51. N-Queens
2020-06-26 20:05:35
# leetcode
# core problems
# hard
Problem
1. 题目简述
给出一个整形数n,找出”n皇后问题“的所有解。每一行,每一列以及每个皇后所在的对角线不能包含其他皇后。例如:
Example:
Input: 4
Output: [
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
2. 算法思路
相关问题:
极其经典的”八皇后问题“,用回溯法。跟数独问题基本上是一样的,但是要稍微简单些。
回溯法
这里问题其实是在于,如何判断当前行所放的皇后是否合理,这里我的做法是直接将二维的棋盘表示了出来,然后用board[i - x][j - x]表示左上到右下的对角线,用board[i - x][j + x]表示右上到左下的对角线(注意边界)。
但是其实还有另外一种更为节省空间的做法(其实必要性不大),用bool型数组来表示每一行、每一列、每一个对角线是否已经共存在了一个皇后。如果已知n,那么每一组(左上到右下算一组,左下到右上算一组)对角线的个数也是已知的,2n - 1,然后用[i, j]做一个映射即可。
1 | class Solution { |