【算法三十七】51. N 皇后

51. N 皇后

回溯:

java 复制代码
class Solution {
    public List<List<String>> solveNQueens(int n) {
        List<List<String>> ans = new ArrayList<>();
        //每一行的queen在哪一列
        int[] queens = new int[n];
        //每一列有没有重复
        boolean[] col = new boolean[n];
        //主对角线有没有重复
        boolean[] dig1 = new boolean[2*n-1];
        //副对角线有没有重复
        boolean[] dig2 = new boolean[2*n-1];

        dfs(0,queens,col,dig1,dig2,ans);
        return ans;
    }

    private void dfs(int r,int[] queens,boolean[] col,boolean[] dig1,boolean[] dig2,List<List<String>> ans){
        int n = col.length;
        if(r == n){
            List<String> partAns = new ArrayList<>();
            for(int i:queens){
                char[] partAns1 = new char[n];
                Arrays.fill(partAns1,'.');
                partAns1[i] = 'Q';
                partAns.add(new String(partAns1));
            }
            ans.add(partAns);
            return;
        }
        //对列遍历
        for(int c = 0;c<n;c++){
            //对副对角线的规律加上n-1这样符合下标规律
            int rc = r-c + n-1;
            if(!col[c] && !dig1[r+c] && !dig2[rc]){
                queens[r] = c;
                col[c] = dig1[r+c] = dig2[rc] = true;
                //递归
                dfs(r+1,queens,col,dig1,dig2,ans);
                //恢复现场
                col[c] = dig1[r+c] = dig2[rc] = false;
            }
        }
    }
}

时间复杂度:O(N^2 * N!)

空间复杂度:O(N)

相关推荐
专注仿真4 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸4 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫4 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil2088 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing9 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
loulanyue_9 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院10 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan10 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法
姜鱼问生10 小时前
Docker Volume 备份与恢复实战:不停机迁移数据
后端·算法·架构
suhan10 小时前
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
数据结构·后端·算法