Leetcode初学——N皇后||

题目:

分析:

这道题和前一道——N皇后|   极其相似,唯一的不同点就是把返回值改为了int型,返回有多少种解法

我们依然可以用回溯法来做

图解就不再做了,可以参考我之前关于N皇后的文章

代码:

class Solution {
    //用来存储最后结果
    private int count=0;
    public int totalNQueens(int n) {
        HelpToSolveNQueens(n,new ArrayList<Integer>(),new ArrayList<Integer>(),new ArrayList<Integer>());
        return count;
    }

    //递归函数
    //queen用于存储每一行中皇后所在的列
    //sum用于判断已有皇后的左对角线是否有重合
    //diff用于判断已有皇后的右对角线是否有重合
    public void HelpToSolveNQueens(int n,List<Integer> queen,List<Integer> sum,List<Integer> diff){
        if(queen.size()==n){
            count++;
            return;
        }

        for(int i=1;i<=n;i++){
            int temp_sum=queen.size()+i+1;
            int temp_diff=queen.size()+1-i;
            if((!queen.contains(i)) && (!sum.contains(temp_sum)) && (!diff.contains(temp_diff))){
                queen.add(i);
                sum.add(temp_sum);
                diff.add(temp_diff);
                HelpToSolveNQueens(n,queen,sum,diff);
                queen.remove(queen.size()-1);
                sum.remove(sum.size()-1);
                diff.remove(diff.size()-1);
            }
        }
    }
}

结果:

发布了57 篇原创文章 · 获赞 3 · 访问量 1063

猜你喜欢

转载自blog.csdn.net/qq_39377543/article/details/104206711