LeetCode-51&52.N-Queens

来源:互联网 发布:js 通过代理解决跨域 编辑:程序博客网 时间:2024/05/22 12:55

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题解中的个数


0 0