【Hot100】LeetCode—51. N 皇后

目录

  • 1- 思路
    • 题目识别
    • 回溯
  • 2- 实现
    • 51. N 皇后——题解思路
  • 3- ACM 实现


  • 原题链接:51. N 皇后

1- 思路

题目识别

  • 识别1 :给定一个整数 n ,求解如何放置棋子的问题。

回溯

回溯三部曲

  • 1- 回溯参数和返回值
    • 传参 cheeseBoardnrow 传递三个参数
    • row 用来控制,当前遍历到了第几行
  • 2- 终止条件
    • if( row == n) 收集结果
  • 3- 回溯过程
    • 因为回溯的参数传递了 row,其中 row 代表的是行
    • 因此在回溯的过程中需要遍历 n ,遍历列

2- 实现

51. N 皇后——题解思路

在这里插入图片描述

class Solution {List<List<String>> res = new ArrayList<>();public List<List<String>> solveNQueens(int n) {char[][] cheesBoard = new char[n][n];for(char[] c:cheesBoard){Arrays.fill(c,'.');}backTracing(0,n,cheesBoard);return res;}public void backTracing(int row,int n, char[][] chessBoard){// 1. 终止条件if(row == n){res.add(ArrayToList(chessBoard));return;}// 3. 回溯for(int i = 0 ; i < n ; i++){if(isValid(row,i,n,chessBoard)){chessBoard[row][i] = 'Q';backTracing(row+1,n,chessBoard);chessBoard[row][i] = '.';}}}private List<String> ArrayToList(char[][] board){List<String> path = new ArrayList<>();for(char[] c:board){path.add(String.copyValueOf(c));}return path;}private boolean isValid(int row,int col,int n ,char[][] chessBoard){// 列判断for(int i = 0 ; i < row ; i++){if(chessBoard[i][col] == 'Q'){return false;}}// 45度for(int i = row-1,j=col-1; i>=0 && j>=0 ;i--,j--){if(chessBoard[i][j] == 'Q'){return false;}}// 145 度for(int i = row-1,j=col+1; i >=0 && j<n ;i--,j++){if(chessBoard[i][j] == 'Q'){return false;}}return true;}
}

3- ACM 实现

public class solveQueens {static List<List<String>> res = new ArrayList<>();public static List<List<String>> solveN(int n ){char[][] cheesBoard = new char[n][n];backTracking(0,n,cheesBoard);return res;}public static void backTracking(int row,int n ,char[][] chessBoard){// 终止条件if(row == n){res.add(ArrayToList(chessBoard));return;}// 3. 回溯for(int i = 0 ; i < n;i++){if(isValid(row,i,n,chessBoard)){chessBoard[row][i] = 'Q';backTracking(row+1,n,chessBoard);chessBoard[row][i] = '.';}}}private static List<String> ArrayToList(char[][] chessBoard){List<String> path = new ArrayList<>();for(char[] c:chessBoard){path.add(String.copyValueOf(c));}return path;}private static boolean isValid(int row,int col,int n,char[][] chessBoard){// 列for(int i = 0 ; i < row;i++){if(chessBoard[i][col] == 'Q'){return false;}}// 45for(int i = row-1,j = col-1 ; i>=0 && j>=0 ;i--,j--){if(chessBoard[i][j] == 'Q'){return false;}}// 135for(int i = row-1,j=col+1 ; i >=0 && j<n ; i--,j++){if(chessBoard[i][j] == 'Q'){return false;}}return true;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入棋盘n");int n = sc.nextInt();System.out.println("结果是"+solveN(n).toString());}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…

Solidity优质例子(一)食品溯源智能合约

这个智能合约FoodInfoItem的功能是管理食品的追溯信息&#xff0c;包括食品在不同阶段的流转、质量记录、消费者评分等。它通过区块链记录食品的生产、分销和销售过程&#xff0c;确保每一环节的透明和不可篡改性。 实际生活中的用途&#xff1a; 食品安全和质量控制&#xff1…

实时数仓3.0DWD层

实时数仓3.0DWD层 DWD层设计要点&#xff1a;9.1 流量域未经加工的事务事实表9.1.1 主要任务9.1.2 思路9.1.3 图解9.1.4 代码 9.2 流量域独立访客事务事实表9.2.1 主要任务9.2.2 思路分析9.2.3 图解9.2.4 代码 9.3 流量域用户跳出事务事实表9.3.1 主要任务9.3.2 思路分析9.3.3 …

速通汇编(五)认识段地址与偏移地址,CS、IP寄存器和jmp指令,DS寄存器

一&#xff0c;地址的概念 通常所说的地址指的是某内存单元在整个机器内存中的物理地址&#xff0c;把整个机器内存比作一个酒店&#xff0c;内存单元就是这个酒店的各个房间&#xff0c;给这些房间编的门牌号&#xff0c;类比回来就是内存单元的物理地址 在第一篇介绍debug的…

替换 Oracle ,江河信息用 TDengine 解决高基数查询写入问题

在数字经济快速发展的背景下&#xff0c;智慧水利作为重要的基础设施之一&#xff0c;正逐步成为提升水资源管理效率、优化生态环境的重要力量。江西省水投江河信息技术有限公司&#xff08;以下简称“江河信息”&#xff09;作为高新技术国有企业&#xff0c;坚定致力于打造数…

【 html+css 绚丽Loading 】 000052 璇玑转轮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f…

Golang | Leetcode Golang题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; func isLeafNode(node *TreeNode) bool {return node.Left nil && node.Right nil }func sumOfLeftLeaves(root *TreeNode) (ans int) {if root nil {return}q : []*TreeNode{root}for len(q) > 0 {node : q[0]q q[1:]if no…

springbootadmin源码编译修改001_node版本管理工具nvm_任意切换node版本_没有成功记录过程---VUE工作笔记0026

由于项目需要对springbootadmin的源码进行编译和修改. 但是springbootadmin的源码编译很麻烦,主要是由于,springbootadmin-server-ui这个项目,因为他是一个前后端分离的 vue项目,而且是使用 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 首先去下载,发…

无人机培训机构技术股份合作探讨

随着无人机技术的飞速发展&#xff0c;其在航拍、农业、物流、环境监测、应急救援等多个领域展现出巨大潜力&#xff0c;市场对无人机专业人才的需求急剧增加。鉴于此&#xff0c;多家致力于无人机培训教育的机构决定携手合作&#xff0c;通过技术股份合作模式&#xff0c;共同…

C++二叉搜索树学习

目录 一、二叉搜索树概念 二、二叉搜索树的性能分析 三、二叉搜索树的构建 一、二叉搜索树概念 二叉搜索树又叫做二叉排序树&#xff0c;它可以是一颗空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若该树的左子树不为空&#xff0c;那么左子树上的任一节点都小…

【Google Chrome Windows 64 version及 WebDriver 版本】

最近升级到最新版本Chrome后发现页面居然显示错乱实在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 64 位 VersionSize下载地址Date104.0.5112.10282.76 MBhtt…

【HTML】元素的分类(块元素、行内元素、行内块元素)

元素的分类 块元素行内元素行内块元素转换 块元素 独占一行&#xff0c;宽度默认为容器的100%&#xff0c;可以设置宽、高、行高、内外边距&#xff1b;布局时&#xff0c;块元素可以包含块元素和行内元素 <div>div</div><p>p</p><h3>h1-h6</…

C++——内存管理

目录 引言 C/C的内存分布 C语言中动态内存管理方式 C内存管理方式 1.new/delete操作内置类型 2.new与delete操作自定义类型 operator new与operator delete函数 new与delete的实现 1.内置类型 2.自定义类型 定位new表达式 malloc/free和new/delete的区别 结束语 引…

关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解 Filters Filters拦截器的作用是&#xff0c;对请求进行处理 可以进行流量染色 ⭐增加请求头 例子 spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path/api/**filters:- AddR…

Redis的缓存穿透、缓存雪崩、缓存击穿怎么解决

Redis在实际使用中是会遇到很多问题的&#xff0c;例如今天说到的缓存穿透、缓存雪崩、缓存击穿。 缓存穿透&#xff1a; 缓存穿透是指客户端请求的数据在redis缓存和数据中都不存在&#xff0c;这样缓存永远都不会生效&#xff0c;这些请求都会打到数据库当中&#xff0c;对…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

Setting Design Properties

设置设计属性 接下来&#xff0c;在设计上设置配置模式。这是导致物理 约束&#xff0c;在这种情况下是设计的属性&#xff0c;而不是单元的属性。首先&#xff0c;列出所有 当前设计的特性。 1.在Tcl控制台中列出设计的属性&#xff1a; list_property [current_design] 此命…

ITOP-2 分模块安装部署itop

ITOP-2 分模块安装部署itop 一、安装PHP组件1、查看当前Linux服务器安装的PHP版本2、安装源epel&#xff0c;安装源remi&#xff0c;安装yum-config-manager3、用yum-config-manager指定remi的php7.2仓库4、安装升级php5、验证当前PHP的版本 二、部署 MySQL 服务1、设置 Repo2、…

基于TRIZ的救援机器人轻量化设计

在救援机器人设计中&#xff0c;轻量化是一个至关重要的目标&#xff0c;它直接关系到机器人的便携性、运输效率以及在复杂环境中的作业能力。TRIZ理论为我们提供了一套系统化的工具和方法&#xff0c;用于解决设计过程中遇到的各种挑战&#xff0c;特别是在实现轻量化目标时&a…

论文阅读-Demystifying Misconceptions in Social Bots Research

论文链接&#xff1a; https://arxiv.org/pdf/2303.17251 目录 摘要: Introduction Methodological issues Information leakage Cherry-picking&#xff08;采摘樱桃&#xff09; Straw-man methodology &#xff08;稻草人&#xff09; Data biases Conceptual issu…