当前位置: 首页 > web >正文

2025年- H98-Lc206--51.N皇后(回溯)--Java版

1.题目描述

在这里插入图片描述
在这里插入图片描述

2.思路

二维数组集合
(1)N皇后规则
1)不能同行(同一行不能出现2个皇后)
2)不能同列(同一列不能出现2个皇后)
3)不能说45度或135度(斜对角线不能出现2个皇后)

n代表树高,也就是嵌套for循环的行数

3.代码实现

class Solution {public List<List<String>> solveNQueens(int n) {//三维结果数组,用于存储最终所有符合条件的解法。List<List<String>> result=new ArrayList<>();//初始化一个 n x n 的棋盘,用字符数组表示char[][] board=new char[n][n];//先构建棋盘,用.填满,表示该位置为空。for(int i=0;i<n;i++){for(int j=0;j<n;j++){board[i][j]='.';}}//1.确定递归函数的参数backTracking(result,board,0,n);return result;}   //1.确定递归函数的参数//    - solutions: 存储所有解法的列表。//    - board: 当前的棋盘状态。//    - row: 当前正准备放置皇后的行号。从第 0 行开始,调用回溯函数//    - n: 棋盘的大小。//     void backTracking(private void backTracking(List<List<String>>result,char[][]board,int row,int n){//2.确定终止条件,遍历到最后一行if(row==n){result.add(strContruct(board));return;}//3.单层搜索条件for(int col=0;col<n;col++){if(isValid(board,row,col,n)){board[row][col]='Q';// “每一行只放一个皇后” 的规则。因为函数每次被调用时,只处理 row 这一行。在这一行的 for 循环里,它会尝试在 (row, 0), (row, 1), (row, 2)... 等位置放皇后,但一次只会放一个。放下一个之后,它就立刻递归到 row + 1 行去了,所以,“不同行” 是由这个递归结构保证的。backTracking(result,board,row+1,n);board[row][col]='.';}}}private boolean isValid(char[][]board,int row,int col,int n){//不能同列for(int i=0;i<row;i++){if(board[i][col]=='Q'){return false;}}//不能是对角线 45度for(int i=row-1, j=col-1;i>=0&&j>=0;i--,j--){if(board[i][j]=='Q'){return false;}}for(int i=row-1,j=col+1;i>=0&&j<n;i--,j++){if(board[i][j]=='Q'){return false;}}return true;}private List<String> strContruct(char[][] board){// 将 char[][] 棋盘转换为 List<String> 的格式List<String> res=new ArrayList<>();for(int i=0;i<board.length;i++){String curstr=new String(board[i]);res.add(curstr);}return res;}}
http://www.xdnf.cn/news/18300.html

相关文章:

  • ARM架构下的cache transient allocation hint以及SMMUv2的TRANSIENTCFG配置详解
  • EasyExcel篇
  • OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?
  • 【CV 目标检测】Fast RCNN模型③——模型训练/预测
  • c++最长上升子序列长度
  • 8.18网络编程——基于UDP的TFTP文件传输客户端
  • 力扣32:最长有效括号
  • 如何解决机器翻译的“幻觉“问题(Hallucination)?
  • 博客项目 Spring + Redis + Mysql
  • 深度研究系统、方法与应用的综述
  • android 实现表格效果
  • 接口文档——前后端分离开发模式下的“契约书“
  • Java原子类详解
  • MySQL的多版本并发控制(MVCC):
  • illustrator插件大全 免费插件介绍 Ai设计插件集合 (4)
  • LeetCode 每日一题 2025/8/11-2025/8/17
  • Windows 安装使用 MySQL
  • C++架构设计原则
  • 监督学习(Supervised Learning)和 无监督学习(Unsupervised Learning)详解
  • MySQL新手教学
  • 之前说的要写的TCP高性能服务器,今天来了
  • Elasticsearch全文检索中文分词:IK分词器详解与Docker环境集成
  • 用 Python 实现一个“小型 ReAct 智能体”:思维链 + 工具调用 + 环境交互
  • 如何使用 React 101 的 Highcharts 包装器
  • Pomian语言处理器 研发笔记(一):使用C++的正则表达式构建词法分析器
  • 视频讲解:CatBoost、梯度提升 (XGBoost、LightGBM)对心理健康数据、交通流量及股票价格预测研究
  • 从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
  • 8.18 表达式树|浮点数绝对值
  • 基于Flink CDC实现联系人与标签数据实时同步至ES的实践
  • Ps 2025 图像编辑 Photoshop(Mac中文)