๐ŸŒ• ๐ŸŒ• 51. N ็š‡ๅŽ

ๅžไฝ›็ซฅๅญ2022ๅนด6ๆœˆ9ๆ—ฅ
  • algorithm
  • backtrace
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ• ๐ŸŒ• 51. N ็š‡ๅŽ

้šพๅบฆ: ๐ŸŒ• ๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_30.png


่งฃๆณ•

class Solution {
    List<List<String>> res = new ArrayList<>();
    public List<List<String>> solveNQueens(int n) {
        // ๆ€่ทฏ:
        int[][] dp = new int[n][n];
        mySol(n, dp, 0);
        return res;
    }

    private void mySol(int len, int[][] dp, int curRow) {
        // ้€’ๅฝ’็ปˆๆญขๆกไปถ
        if(curRow == len) {
            // ๅฐ่ฃ…็ป“ๆžœ
            getRes(len, dp);
            return;
        }
        for(int j = 0; j < len;j ++) {
            if(isValid(len, dp, curRow, j)) {
                dp[curRow][j] = 1;
                mySol(len, dp, curRow + 1);
                dp[curRow][j] = 0;
            }
        }
    }

    private void getRes(int len, int[][] dp) {
        List<String> list = new ArrayList<>();
        for(int i = 0; i < len; i ++) {
            StringBuilder sb = new StringBuilder();
            for(int j = 0; j < len; j ++) {
                if(dp[i][j] == 0) {
                    sb.append(".");
                } else {
                    sb.append("Q");
                }
            }
            list.add(sb.toString());
        }
        res.add(list);
    }

    private boolean isValid(int len, int[][] dp, int curRow, int curCol) {
        // ๅˆคๆ–ญๅฝ“ๅ‰็‚นๆ˜ฏๅฆๅˆ้€‚ๆ”พๅ…ฅ็š‡ๅŽ
        // ไปŽ ่ฏฅ็‚นๅ‡บๅ‘๏ผŒๅทฆไธŠๆ–น - ไธŠๆ–น - ๅณไธŠๆ–น ๅ‡ๆ— ็š‡ๅŽ
        for(int i = curRow - 1, j = curCol - 1; i >= 0 && j >= 0; i --, j --) {
            if(dp[i][j] == 1) {
                return false;
            } 
        }
        for(int i = curRow; i >= 0; i --) {
            if(dp[i][curCol] == 1) {
                return false;
            }
        }
        for(int i = curRow - 1, j = curCol + 1; i >= 0 && j < len; i --, j ++) {
            if(dp[i][j] == 1) {
                return false;
            }
        }
        return true;
    }
}

่พ“ๅ‡บ

img_29.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/6/20 ไธ‹ๅˆ8:24:47
่ดก็Œฎ่€…: liuxianzhishou