51 https://leetcode.com/problems/n-queens/
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
public class Solution
{
public IList<IList<string>> SolveNQueens(int n)
{
IList<IList<string>> res = new List<IList<string>>();
IList<string> list = new List<string>();
string s = "";
for (int i = 0; i < n; i++)
s += ".";
for (int i = 0; i < n; i++)
list.Add(s);
PlaceQ(res, list, n, 0);
return res;
}
private void PlaceQ(IList<IList<string>> res, IList<string> list,int n,int row)
{
if (row == n)
{
res.Add(new List<string>(list));
return;
}
for (int col = 0; col < n; col++)
if (isValid(list,n,row,col))
{
list[row]=list[row].Remove(col,1).Insert(col, "Q");
PlaceQ(res, list, n, row + 1);
list[row] = list[row].Remove(col,1).Insert(col, ".");
}
}
private static bool isValid(IList<string> list, int n, int row, int col)
{
for (int i = 0; i < row; i++)
if (list[i][col] == 'Q')
return false;
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--)
if (list[i][j] == 'Q')
return false;
for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++)
if (list[i][j] == 'Q')
return false;
return true;
}
}
52 https://leetcode.com/problems/n-queens-ii/
求51题解中的个数