Untitled

 avatar
unknown
java
5 months ago
1.7 kB
2
Indexable
class Solution {
    public List<List<String>> solveNQueens(int n) {
        List<List<String>> res = new ArrayList<>();
        dfs(res, new ArrayList<>(), n, 0);
        return res;
    }

    private void dfs(List<List<String>> res, List<String> temp, int n, int row) {
        if (row == n) {
            res.add(new ArrayList<>(temp));
            return;
        }
        for (int j = 0; j < n; j++) {
            if (isValid(row, j, n, temp)) {
                temp.add(createRowString(j, n));
                dfs(res, temp, n, row + 1);
                temp.remove(temp.size() - 1);
            }
        }
    }

    private String createRowString(int idx, int n) {
        String res = "";
        for (int i = 0; i < n; i++) {
            if (i == idx) {
                res = res + "Q";
            } else {
                res = res + ".";
            }
        }
        return res;
    }

    private boolean isValid(int row, int col, int n, List<String> temp) {
        if (row == 0)
            return true;
        // check col
        for (int i = 0; i < row; i++) {
            if (temp.get(i).charAt(col) == 'Q') {
                return false;
            }
        }
        // check northwest
        int i = row, j = col;
        while (i - 1 >= 0 && j - 1 >= 0) {
            if (temp.get(i - 1).charAt(j - 1) == 'Q') {
                return false;
            }
            i--;
            j--;
        }
        // check northeast
        i = row;
        j = col;
        while (i - 1 >= 0 && j + 1 < n) {
            if (temp.get(i - 1).charAt(j + 1) == 'Q') {
                return false;
            }
            i--;
            j++;
        }
        return true;
    }
}
Editor is loading...
Leave a Comment