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

LeetCode 面试题 08.12. 八皇后

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。

  注意:本题相对原题做了扩展

示例:

输入: 4
输出: [[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]
解释: 4 皇后问题存在如下两个不同的解法。
[
[“.Q…”, // 解法 1
“…Q”,
“Q…”,
“…Q.”],
[“…Q.”, // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]

  点击此处跳转题目。

二、C# 题解

  经典的 n 皇后题目,使用递归求解如下:

public class Solution {public IList<IList<string>> SolveNQueens(int n) {IList<IList<string>> ans = new List<IList<string>>();Partition(ans, new int[n], 0, 0, n);return ans;}// 递归方法,pos[i] 记录第 i 行皇后的位置public void Partition(IList<IList<string>> ans, int[] pos, int i, int j, int n) {if (i == n) {// 递归出口ans.Add(Generate(pos));return;}if (j == n) return;if (Check(pos, i, j, n)) {// 如果可以放下皇后pos[i] = j;                       // 放皇后Partition(ans, pos, i + 1, 0, n); // 继续下一行}Partition(ans, pos, i, j + 1, n); // 继续该行下一个进行判断}// 检查当前位置 i,j 是否能放皇后public bool Check(int[] pos, int i, int j, int n) {for (int k = 0; k < i; k++) {int difX = j - pos[k], difY = i - k;             // x 差值和 y 差值if (difX == 0) return false;                     // 竖向判断if (difX == difY || difX == -difY) return false; // 横向判断}return true;}// 依据下标位置生成字符串结果public IList<string> Generate(int[] pos) {IList<string> ans = new List<string>();StringBuilder sb  = new StringBuilder(new string('.', pos.Length));for (int i = 0; i < pos.Length; i++) {sb[pos[i]] = 'Q';ans.Add(sb.ToString());sb[pos[i]] = '.';}return ans;}
}
  • 时间:116 ms,击败 100.00% 使用 C# 的用户
  • 内存:46.79 MB,击败 95.65% 使用 C# 的用户
http://www.lryc.cn/news/195243.html

相关文章:

  • Excel 的下拉列表
  • 基于Effect的组件设计 | 京东云技术团队
  • 541. 反转字符串 II
  • 基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)
  • 哪个牌子的洗地机好用?2023洗地机推荐
  • 根据脑图谱获取感兴趣区域的mask
  • Android Framework通信:Handler
  • Redis的安装和配置
  • Java武侠文字游戏
  • 数字化时代下,汽车行业如何突破现有营销困境?
  • 19 | 如何搞清楚事务、连接池的关系?正确配置是怎样的
  • 备忘录模式-撤销功能的实现
  • C++入门(二)
  • 【软件设计师】面向对象类图的六种关系
  • 二十七、【四种蒙版】
  • 卡尔曼家族从零解剖-(00)目录最新无死角讲解
  • Linux系统之ip命令的基本使用
  • 【推荐算法】ctr cvr联合建模问题合集
  • 安装njnx --chatGPT
  • 性能测试需求分析
  • logback服务器日志删除原理分析
  • 到底什么才是真正的商业智能(BI)
  • Pulsar Manager配置自定义认证插件访问
  • Java SimpleDateFormat linux时间字符串转时间轴的坑
  • 202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型
  • web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)
  • docker-compose部署elk(8.9.0)并开启ssl认证
  • 解决java.lang.IllegalArgumentException: servlet映射中的<url pattern>[demo1]无效
  • 软件测试学习(三)易用性测试、测试文档、软件安全性测试、网站测试
  • Java中,对象一定在堆中分配吗?