[LeetCode 52] N皇后 II

题目描述

[LeetCode 52] N皇后 II
示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],

["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]

题目分析

N皇后 II和LeetCode 51其实是一摸一样的题,不过这道题就是把回溯做到底了而已,相比之下比上一题更简单了。

源码

class Solution {
public int totalNQueens(int n) {
    boolean[] col=new boolean[n];
    boolean[] main_diag=new boolean[2*n];
    boolean[] anti_diag=new boolean[2*n];
    return dfs(col,main_diag,anti_diag,n,0);
}
public int dfs(boolean[] col,boolean[] main_diag,boolean[] anti_diag,int n,int row){
    int res=0;
    if(row==n){
        return 1;
    }
    for(int i=0;i<n;i++){
        if(!col[i]&&!main_diag[i+row]&&!anti_diag[row-i+n]){
            col[i]=true;
            main_diag[i+row]=true;
            anti_diag[row-i+n]=true;
            res+=dfs(col,main_diag,anti_diag,n,row+1);
            col[i]=false;
            main_diag[i+row]=false;
            anti_diag[row-i+n]=false;
        }
    }
    return res;
}
}

难点

只要在上一题的理解上再进行完整的回溯就可以啦。重点还是回溯算法啦。

小结

复习了一次回溯算法。

[1]https://leetcode-cn.com/problems/n-queens-ii/

相关文章: