经典的回溯算法题leetcode棋盘问题思路代码详解

news2024/11/17 5:29:49

目录

棋盘问题

leetcode51题.N皇后


对回溯算法感兴趣的朋友也可以多多支持一下我的其他文章。

回溯算法详解-CSDN博客

经典的回溯算法题leetcode组合问题整理及思路代码详解-CSDN博客

经典的回溯算法题leetcode子集问题思路代码详解-CSDN博客

经典的回溯算法题leetcode全排列问题思路代码详解-CSDN博客 

棋盘问题

一般棋盘问题都是用回溯算法来做的,我们之前说过回溯算法是一种暴力方法尝试每一种可能,思路不难但是写起来很容易出错。

leetcode51题.N皇后

51. N 皇后 - 力扣(LeetCode)

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的n 皇后问题的解决方案。

每一种解法包含一个不同的n皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

img

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]
class Solution { 
    //存放结果集的变量res
    List<List<String>> res = new ArrayList<>();
    public List<List<String>> solveNQueens(int n) {
        char[][] map = new char[n][n];
      //初始化
        for(int i = 0;i < n; i++){
            for(int j = 0; j < n; j++){
                map[i][j] = '.';
            }
        }
        backTrack(map, 0, n);
        return res;
    }

    //回溯函数:参数有棋盘(二维字符类型)、处理到了第几行、一共有几行
    void backTrack(char[][] map, int row, int n){
        // 结束条件:处理到最后一行
        if(row == n){
            res.add(help(map, n));
            return;
        }

        // 递归+回溯
        for(int col = 0; col < n; col++){
            // 判断能否存放皇后
            if(isValid(map, row, col, n)){
                map[row][col] = 'Q';
                backTrack(map, row+1, n);
                map[row][col] = '.';
            }
        }
    }

    boolean isValid(char[][] map, int row, int col, int n){
        // 判断列
        for(int i = 0; i < row; i++){
            if(map[i][col] == 'Q'){
                return false;
            }
        }
        // 判断右斜
        for(int i = row - 1, j = col - 1; i >=0 && j >= 0; i--, j--){
            if(map[i][j] == 'Q'){
                return false;
            }
        }

        // 判断左斜
        for(int i = row - 1, j = col + 1; i >=0 && j < n; i--, j++){
            if(map[i][j] == 'Q'){
                return false;
            }
        }

        return true;
    }

    // 把二位字符数组转为List<String>
    List<String> help(char[][] map, int n){
        List<String> temp = new ArrayList<>();
        for(int i = 0; i < n; i++){
            StringBuilder build = new StringBuilder();
            for(int j = 0; j < n; j++){
                build.append(map[i][j]);
            }
            temp.add(build.toString());
        }
        return temp;
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1247419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++类与对象(5)—流运算符重载、const、取地址

目录 一、流输出 1、实现单个输出 2、实现连续输出 二、流输入 总结&#xff1a; 三、const修饰 四、取地址 .取地址及const取地址操作符重载 五、[ ]运算符重载 一、流输出 1、实现单个输出 创建一个日期类。 class Date { public:Date(int year 1, int month 1,…

【VSCode】自定义转换大小写快捷键

文章目录 VSCode 是没有可以直接转换字母大小写的快捷键的&#xff0c;但是可以通过设置去定义 点击左下角设置按钮&#xff0c;并选择键盘快捷方式 在快捷方式里面搜索写&#xff0c;就能找到&#xff1a; 选择要设置的快捷键&#xff0c;并点击左侧的号 在键盘上按住你想设置…

3D卷积的理解

卷积核不仅需要在高宽这两个维度上进行滑动&#xff0c;还需要在时间维度上进行滑动

升级python后sudo apt-get update报错

sudo apt-get update 报错&#xff1a; sh: /usr/lib/cnf-update-db: /usr/bin/python3.7.5: bad interpreter: No such file or directory Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success if /usr/bin/test -w /var/lib/c…

分块矩阵知识点整理:

1.分块方法&#xff1a;横竖线不能拐弯&#xff0c;思想为将矩阵分块看作向量计算 2.标准型 不一定是方的 特殊性&#xff1a;经过分块后会出现单位矩阵和0矩阵 3.分块矩阵的运算: 1.加减乘的运算与向量运算相同 4.分块矩阵求转置&#xff1a; 1.将子块看作普通元素求转置 2…

【文献分享】DynaSLAM:你见过动态物体修补效果这么好的SLAM吗?

论文题目&#xff1a;DynaSLAM: Tracking, Mapping, and Inpainting in Dynamic Scenes 中文题目&#xff1a;DynaSLAM&#xff1a;动态场景中的跟踪、建图和图像修复 作者&#xff1a;Berta Bescos等 论文链接&#xff1a;https://arxiv.org/pdf/1806.05620.pdf 1 笔者个人…

JavaScript 的双问号 和 ?. 的含义和作用

1、?. &#xff08;可选链运算符&#xff09; ?. 表示&#xff1a;可选链操作符( ?. )允许读取位于连接对象链深处的属性的值&#xff0c;而不必明确验证链中的每 个引用是否有效。操作符的功能类似于 . 链式操作符&#xff0c;不同之处在于&#xff0c;在引用为空(null 或…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

Apollo接入配置中心 -- 源码分析之如何获取配置

全文参考&#xff1a;https://mp.weixin.qq.com/s/G5BV5BIdOtB3LlxNsr4ZDQ https://blog.csdn.net/crystonesc/article/details/106630412 https://www.cnblogs.com/deepSleeping/p/14565774.html 背景&#xff1a;近期在接入行内配置中心&#xff0c;因此对配置的加载接入有了…

浅析三相异步电动机控制的电气保护

安科瑞 华楠 摘 要&#xff1a;要求三相异步电动机的控制系统不仅要保证电机正常启动和运行&#xff0c;完成制动操作&#xff0c;还要通过相关保护措施维护电动机的安全使用。基于此&#xff0c;本文以电动机电气保护作为研究对象&#xff0c;结合三相异步电动机的机械特点&…

electerm 跨平台的终端 /ssh/sftp 客户端

文章目录 electerm功能特性主题配色 electerm 每个程序员基本都离开SSH链接工具,目前市场上好用的基本都是收费的 给大家推荐一款国人开发的开源链接工具https://github.com/electerm/electerm 到目前为止star已经9.5K了,非常受欢迎 功能特性 支持ssh,telnet,serialport,本地和…

满满干货!搭建智能视频监控系统如何挑选前端设备?

在此前的文章中&#xff0c;小编也和大家讨论过如何选择适合场景需求又性价比高的摄像头。除了摄像头以外&#xff0c;智能监控系统的组成也少不了前端设备&#xff0c;今天就给大家介绍一下几大前端设备的区别与应用场景吧。 在智能视频监控中&#xff0c;前端设备一般分为四类…

功率放大器在介电弹性体测试中的应用案例

介电弹性体作为一种具有高介电常数的材料&#xff0c;近年来越来越受到人们的关注。由于其具有许多独特的性质&#xff0c;如高灵敏度、快速响应以及出色的循环稳定性&#xff0c;使其在许多领域都有广泛的应用&#xff0c;如电子皮肤、传感器和执行器等。在介电弹性体的测试中…

rocky8.9配置K8S集群kubernetes,centos同理

rocky8.9配置K8S集群 节点主机名IP地址mastertang1192.168.211.101node1tang2192.168.211.102node2tang3192.168.211.103 1&#xff09;准备工作 全部主机都配置静态ip vi /etc/sysconfig/network-scriptsTYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DE…

AI智能识别如何应用于单病种上报?

何为AI? AI是人工智能&#xff08;Artificial Intelligence&#xff09;的英文缩写&#xff0c;它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支&#xff0c;该领域的研究包括机器人、语言识别…

C++算法 —— 贪心(3)

文章目录 1、买卖股票的最佳时机2、买卖股票的最佳时机Ⅱ3、K次取反后最大化的数组和4、按身高排序5、优势洗牌6、最长回文串7、增减字符串匹配 1、买卖股票的最佳时机 121. 买卖股票的最佳时机 这里最容易想到的就是暴力枚举&#xff0c;两层for循环&#xff0c;i 0&#xf…

TFA-Net

TFA SCA means ‘Self-Context Aggregation’ 作者未提供代码

JVM中如何实现垃圾收集

Java虚拟机&#xff08;JVM&#xff09;使用垃圾收集器&#xff08;Garbage Collector&#xff09;来管理内存&#xff0c;清理不再使用的对象以释放内存空间。垃圾收集的主要目标是自动化内存管理&#xff0c;使开发人员无需显式地释放不再使用的内存&#xff0c;从而降低了内…

EFAK-v3.0.1版部署与使用

一、前言 EFAK&#xff08;(Eagle For Apache Kafka&#xff0c;以前称为Kafka Eagle&#xff09;用于在使用 Topic 的情况下监控 Kafka 集群。包含Offset 的产生、Lag的变化、Partition的分布、Owner、Topic的创建以及修改的时间等信息。 二、环境&安装包 官方下载连接E…