52. N皇后 II

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


这里是求个数,所以思路完全一样,就是到结合条件的时候个数累加即可。


    int ret = 0;
    public int totalNQueens(int n) {
        char[][] board = new char[n][n];
        dfs(board,0);
        return ret;

    }

    public void dfs(char[][] board, int row) {
        if(row == board.length) {
            ret++;
            return;
        }
        // 对于该行来说,有n中选择。每一个都试
        for(int i=0;i<board.length;i++) {
            if(!checkOther(board,row,i)) {
                continue;
            }
            board[row][i] = 'Q';
            dfs(board,row+1);
            board[row][i] = '.';
        }
    }

    


    public boolean checkOther(char[][] board,int row, int col) {

        for(int i=0;i<board.length;i++) {
            if(board[row][i] == 'Q') {
                return false;
            }
        }

        for(int i=0;i<board.length;i++) {
            if(board[i][col] == 'Q') {
                return false;
            }
        }

        int p=row;
        int q=col;

        while(q>=0 && p>=0) {
            if(board[p][q] == 'Q') {
                return  false;
            }
            p--;
            q--;
        }

        p=row;
        q=col;

        while(p>=0 && q<board.length) {
            if(board[p][q] == 'Q') {
                return false;
            }
            p--;
            q++;
        }

        p=row;
        q=col;

        while(p<board.length && q >=0) {
            if(board[p][q] == 'Q') {
                return false;
            }
            p++;
            q--;
        }

        p=row;
        q=col;

        while(p<board.length && q<board.length) {
            if(board[p][q] == 'Q') {
                return false;
            }
            p++;
            q++;
        }

        return true;
 
    }
posted @ 2022-03-01 10:56  一颗青菜  阅读(8)  评论(0)    收藏  举报