【LeetCode笔记】51. N 皇后(DFS、经典题)
文章目录
- 题目描述
- 思路 && 代码
题目描述
- 经典题了…但是大一敲过后就再没碰过了。结果面试还是会问= =,今天补一下~
思路 && 代码
- 还是挺清晰的,要点如下:
- 使用 DFS,找到一个了再继续找
- 对每一行,逐列进行可行点选择
- 放置点可行判断:【对低行进行】列、45度、135度判断
- 答案格式转换,char[][] 变成 List
class Solution {List<List<String>> ans = new ArrayList<>(); // 全局变量,记录答案char[][] graph;public List<List<String>> solveNQueens(int n) {// 1、地图初始化graph = new char[n][n];for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {graph[i][j] = '.';}}// 2、DFS 获取答案dfs(0);return ans;}void dfs(int row) {// 1、递归结束,加入答案if(row == graph.length) {ans.add(array2List());}// 2、对当前行,逐列进行判断、DFSfor(int col = 0; col < graph[0].length; col++) {if(judge(row, col)) {graph[row][col] = 'Q';dfs(row + 1);graph[row][col] = '.';}}}// 判断可行:行不用,因为一行只放一个。高行不用,因为还没放棋子boolean judge(int row, int col) {// 1、列for(int i = row - 1; i >= 0; i--) {if(graph[i][col] == 'Q') {return false;}}// 2、45度for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if(graph[i][j] == 'Q') {return false;}}// 3、135度for(int i = row - 1, j = col + 1; i >= 0 && j < graph[0].length; i--, j++) {if(graph[i][j] == 'Q') {return false;}}return true;}// 转换答案格式。List<String> array2List() {List<String> list = new ArrayList<>();for(int i = 0; i < graph.length; i++) {list.add(String.valueOf(graph[i]));}return list;}
}
【LeetCode笔记】51. N 皇后(DFS、经典题)相关推荐
- LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂
LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...
- Leetcode 51. N 皇后 (每日一题 20211008)
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案.每一种解法包含一个不同的 n 皇后问题 ...
- 蓝桥杯 DFS经典题 —— 算式900、寒假作业(告别枚举法)
类似于 算式 900.寒假作业这种题目,可以直接暴力破解,但是它非常的浪费时间,而且程序不是太过于美观,很容易让我们对算法失去兴趣,今天,我们告别传统的暴力破解,使用伟大搜索算法 -- DFS(深度优 ...
- 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独 这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...
- LeetCode《编程能力入门》刷题笔记(34 题全)
LeetCode<编程能力入门>刷题笔记 基本数据类型 1. 在区间范围内统计奇数数目 _解法1:暴力迭代 _解法2:数学(找规律) 2. 去掉最低工资和最高工资后的工资平均值 _解法1: ...
- 【LeetCode】回溯 N皇后(DFS、子集、组合问题)
总结 技巧: 子集和组合问题经常需要一个start来标记开始选择的起始位置来达到去重的目的,排列问题不用 [46.全排列] 排列问题常需要一个used数组来标记已经选择的元素(也可以同时用于去重) C ...
- 日拱一卒——LeetCode 51.N皇后
大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...
- LeetCode回溯算法——51.N皇后问题详解
51.N皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整 ...
- Leetcode(51)——N 皇后
Leetcode(51)--N 皇后 题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n n n 皇后问题 研究的是如何将 n n n 个皇后放置在 n × n n ...
最新文章
- 架构师之路 — 分布式系统 — Protocol Buffers 序列化协议
- python 时序数据库_时序数据库InfluxDB
- JS实现文本中查找并替换字符
- 新手该学习Python2.x版本还是3.x版本
- 麦克纳姆轮全向移动机器人斜向直线运动分析
- 神操作!使用命令更改MAC截图默认保存格式的方法
- 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
- Java目前主流框架
- 第2章 关系数据库练习题
- 苏宁小店上线咖啡业务,成为国内O2O社区便利店的创领者!
- css3实现旋转的立方体
- hyperledger fabric 2.3.3 环境搭建教程
- 画板数据保存成文件的两种方法小结
- CPen虚线无效问题
- 深度学习AI美颜系列---人脸数据增强
- 展锐平台 Android 10.0 OTA升级开机Logo
- SSH不能传输文件问题
- 到底vuex是什么?
- c语言令牌大全,C ++令牌(Tokens)
- java:输出一个蜗牛图案
热门文章
- 模板引擎工作原理_广州seo了解下搜索引擎的工作原理是什么
- (Python代码)通过视差图获取图片中不同物体的高度比
- duilib中的添加自定义控件
- 给Sublime text2安装Zen Coding插件
- Retrofit与RXJava整合
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨判断三角形【难度简单】
- postgresql 安装使用
- Linux 用户 和 用户组 管理 (添加、删除、修改)及说明
- 《大话设计模式》Python 版代码实现
- android applybatch,android – 使用applyBatch插入成千上万的联系人条目很慢