52. N-Queens II

一、题目

  1、审题

  

  2、分析:

    输入数字n, 求 n-皇后问题存在几个解。

 

二、解答

  1、思路:

    同上一题,只是采用一个参数对解的个数进行记录,最终 DFS 返回的即为所求解个数。

class Solution {
    public int totalNQueens(int n) {
        char[][] arr = new char[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = '.'; 
            }
        }
        int total = helper(arr, n, 0, 0);
        
        return total;
    }

    private int helper(char[][] arr, int n, int row, int total) {
        
        if(row == n) {
            return ++total;
        }
        else {
            for (int column = 0; column < n; column++) {
                if(isValid2(arr, row, column, n)) {
                    arr[row][column] = 'Q';
                    total = helper(arr, n, row+1, total);
                    arr[row][column] = '.';
                }
            }
        }
        
        return total;
    }


    private boolean isValid2(char[][] arr, int row, int column, int n) {
        
        // check the column
        for (int i = 0; i < row; i++) 
            if(arr[i][column] == 'Q')
                return false;
        
        // check the 45 o
        for (int i = row -1, j = column - 1; i >= 0 && j >= 0; i--, j--)
            if(arr[i][j] == 'Q')
                return false;
        
        // check the 135 o
        for(int i = row -1, j = column + 1; i >= 0 && j < n; --i, ++j)
            if(arr[i][j]== 'Q' )
                return false;
        
        return true;
    }
}

 

posted @ 2018-09-15 11:34  skillking2  阅读(123)  评论(0编辑  收藏  举报