文章目录

  • 题目描述
  • 思路 && 代码

题目描述

  • 经典题了…但是大一敲过后就再没碰过了。结果面试还是会问= =,今天补一下~

思路 && 代码

  • 还是挺清晰的,要点如下:

    1. 使用 DFS,找到一个了再继续找
    2. 对每一行,逐列进行可行点选择
    3. 放置点可行判断:【对低行进行】列、45度、135度判断
    4. 答案格式转换,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、经典题)相关推荐

  1. LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂

    LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...

  2. Leetcode 51. N 皇后 (每日一题 20211008)

    n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案.每一种解法包含一个不同的 n 皇后问题 ...

  3. 蓝桥杯 DFS经典题 —— 算式900、寒假作业(告别枚举法)

    类似于 算式 900.寒假作业这种题目,可以直接暴力破解,但是它非常的浪费时间,而且程序不是太过于美观,很容易让我们对算法失去兴趣,今天,我们告别传统的暴力破解,使用伟大搜索算法 -- DFS(深度优 ...

  4. 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独

    目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独         这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...

  5. LeetCode《编程能力入门》刷题笔记(34 题全)

    LeetCode<编程能力入门>刷题笔记 基本数据类型 1. 在区间范围内统计奇数数目 _解法1:暴力迭代 _解法2:数学(找规律) 2. 去掉最低工资和最高工资后的工资平均值 _解法1: ...

  6. 【LeetCode】回溯 N皇后(DFS、子集、组合问题)

    总结 技巧: 子集和组合问题经常需要一个start来标记开始选择的起始位置来达到去重的目的,排列问题不用 [46.全排列] 排列问题常需要一个used数组来标记已经选择的元素(也可以同时用于去重) C ...

  7. 日拱一卒——LeetCode 51.N皇后

    ​ 大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...

  8. LeetCode回溯算法——51.N皇后问题详解

    51.N皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整 ...

  9. Leetcode(51)——N 皇后

    Leetcode(51)--N 皇后 题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n n n 皇后问题 研究的是如何将 n n n 个皇后放置在 n × n n ...

最新文章

  1. 架构师之路 — 分布式系统 — Protocol Buffers 序列化协议
  2. python 时序数据库_时序数据库InfluxDB
  3. JS实现文本中查找并替换字符
  4. 新手该学习Python2.x版本还是3.x版本
  5. 麦克纳姆轮全向移动机器人斜向直线运动分析
  6. 神操作!使用命令更改MAC截图默认保存格式的方法
  7. 怎么让字体拥有金属风格?15种不同的金属风格文字效果ps样式不可错过!
  8. Java目前主流框架
  9. 第2章 关系数据库练习题
  10. 苏宁小店上线咖啡业务,成为国内O2O社区便利店的创领者!
  11. css3实现旋转的立方体
  12. hyperledger fabric 2.3.3 环境搭建教程
  13. 画板数据保存成文件的两种方法小结
  14. CPen虚线无效问题
  15. 深度学习AI美颜系列---人脸数据增强
  16. 展锐平台 Android 10.0 OTA升级开机Logo
  17. SSH不能传输文件问题
  18. 到底vuex是什么?
  19. c语言令牌大全,C ++令牌(Tokens)
  20. java:输出一个蜗牛图案

热门文章

  1. 模板引擎工作原理_广州seo了解下搜索引擎的工作原理是什么
  2. (Python代码)通过视差图获取图片中不同物体的高度比
  3. duilib中的添加自定义控件
  4. 给Sublime text2安装Zen Coding插件
  5. Retrofit与RXJava整合
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨判断三角形【难度简单】
  7. postgresql 安装使用
  8. Linux 用户 和 用户组 管理 (添加、删除、修改)及说明
  9. 《大话设计模式》Python 版代码实现
  10. android applybatch,android – 使用applyBatch插入成千上万的联系人条目很慢