根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局

class Solution {
    public static int res;
    public int totalNQueens(int n) {
        res = 0;
        int[] usedColumns = new int[n];
        dfs(usedColumns, 0, n);
        return res;
    }

    private void dfs(int[] usedColumns, int row, int n) {
        if(row == n) {
            res++;
            return;
        }

        for(int i = 0; i < n; i++) {
            if(isValid(usedColumns, row, i)) {
                usedColumns[row] = i;
                dfs(usedColumns, row + 1, n);
            }
        }
    }

    private boolean isValid(int[] usedColumns, int row, int column) {
        for(int i = 0; i < row; i++) {
            if(usedColumns[i] == column) return false;
            if((i - usedColumns[i]) == (row - column)) return false;
            if((i + usedColumns[i]) == (row + column)) return false;        
        }
        return true;
    }
}

不用global variable,用int数组来存res的值
class Solution {
    public int totalNQueens(int n) {
        int[] res = {0};
        int[] usedColumns = new int[n];
        dfs(usedColumns, 0, n, res);
        return res[0];
    }

    private void dfs(int[] usedColumns, int row, int n, int[] res) {
        if(row == n) {
            res[0]++;
            return;
        }

        for(int i = 0; i < n; i++) {
            if(isValid(usedColumns, row, i)) {
                usedColumns[row] = i;
                dfs(usedColumns, row + 1, n, res);
            }
        }
    }

    private boolean isValid(int[] usedColumns, int row, int column) {
        for(int i = 0; i < row; i++) {
            if(usedColumns[i] == column) return false;
            if((i - usedColumns[i]) == (row - column)) return false;
            if((i + usedColumns[i]) == (row + column)) return false;        
        }
        return true;
    }
}

results matching ""

    No results matching ""