[Leetcode 51][Hard]-n皇后问题-回溯

news/2024/9/19 0:41:48/ 标签: leetcode, 算法, 职场和发展

目录

一、题目描述

二、整体思路

三、代码


一、题目描述

原题地址

二、整体思路

        这种可以算是组合问题的变种,在回溯函数中我们要保存当前已放置皇后的所有位置,同时递归调用时要进行寻找下一个皇后的放置位置。那么我们可以逐行遍历棋盘并作为递归调用的条件。然后在回溯函数内,遍历当前行的所有位置,同时判断此位置是否可以放置皇后。递归终止的条件时行数=棋盘行数,将此时的棋盘状态存入结果数组。

        难点在于如何判断当前位置是否可以放置皇后,可以从上方、主对角线、副对角线去看有没有已经放置皇后,若有则该位置不可以放置皇后,若无则可。左方不用看的原因是一行只会放一个皇后,每遍历到新的一行时该行一定是未放置皇后的。

三、代码

class Solution {List<List<String>> res=new ArrayList<>();public List<List<String>> solveNQueens(int n) {char[][] chess=new char[n][n];for(int i=0;i<n;i++){for(int j=0;j<n;j++){chess[i][j]='.';}}backtrace(chess,0,n);return res;}void backtrace(char[][] map,int row,int n){if(row==n){res.add(convert(map));return;}for(int i=0;i<n;i++){if(isvalid(map,row,i,n)){map[row][i]='Q';backtrace(map,row+1,n);map[row][i]='.';}}}List<String> convert(char[][] map){//char[][]→List<Stirng>List<String> templist=new ArrayList<>();for(int i=0;i<map.length;i++){StringBuilder tempstr=new StringBuilder();for(int j=0;j<map[i].length;j++){tempstr.append(map[i][j]);}String tempstr2=tempstr.toString();templist.add(tempstr2);}return templist;}boolean isvalid(char[][] map,int row,int col,int n){//upfor(int i=0;i<row;i++){if(map[i][col]=='Q'){return false;}}//leftfor(int i=0;i<col;i++){if(map[row][i]=='Q'){return false;}}//primary diagonal linefor(int i=row-1,j=col-1;i>=0 && j>=0;i--,j--){if(map[i][j]=='Q'){return false;}}//vice diagonal linefor(int i=row-1,j=col+1;i>=0 && j<n;i--,j++){if(map[i][j]=='Q'){return false;}}return true;}
}


http://www.ppmy.cn/news/1519880.html

相关文章

如何完美实现 Go 服务的平滑升级

Go 服务作为常驻进程,如何进行服务升级呢?你可能会觉得这还不简单,先将现有服务停止,再启动新的服务不就可以了。可是将现有服务停止时,如果它还在处理请求,那么这些请求该如何处理?另外,在现有服务已经退出但是新服务还没有启动期间,新的请求到达了又该如何处理? Go…

Logistic分类算法原理及Python实践

一、Logistic分类算法原理 Logistic分类算法&#xff0c;也称为逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;是机器学习中的一种经典分类算法&#xff0c;主要用于解决二分类问题。其原理基于线性回归和逻辑函数&#xff08;Sigmoid函数&#xff09;的组…

3.4 数据传送指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

使用JavaScript读取手机联系人列表:从理论到实践

更多内容前往个人网站&#xff1a;孔乙己大叔 在现代Web开发中&#xff0c;随着技术的不断进步&#xff0c;以前看似不可能的任务现在变得可行。例如&#xff0c;使用JavaScript读取手机联系人列表这一功能&#xff0c;在几年前几乎是不可想象的&#xff0c;但现在随着Web API的…

MyBatis之XML配置文件(一)

Mbatis是一个ORM框架&#xff0c;可以用XML配置文件或注解映射SQL语句&#xff0c;映射文件是MyBatis框架的核心&#xff0c;本文主要讲述XML 映射文件的结构和使用方法。 一、SQL映射文件 SQL映射文件就是mapperxml配置文件&#xff0c;主要实现SQL语句的配置和映射&#xf…

pdf.js如何支持base64的查看

1.pdf.js 作为一个查看在线阅读pdf的软件&#xff0c;常常被运用到前端开发中&#xff0c;但是如何让pdf支持base64的查看&#xff0c;这边就需要去进行修改一些代码了 这边我们就进行开发修改 首先去下载 https://mozilla.github.io/pdf.js/ 当然了&#xff0c;低版本的可以…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发&#xff0c;以下是一些需要学习的内容&#xff1a; 一、基础知识 Java 或 Kotlin 编程语言&#xff1a;Android 开发主要使用这两种语言&#xff0c;确保你对其中一种有扎实的掌握&#xff0c;包括语法、面向对象编程概念、数据结构和算法等…

docker-compose 启动的harbor页面能登录,但是不能推送镜像

问题现象&#xff1a; docker-compose 安装的harbor&#xff0c;页面可以正常打开&#xff0c;但是不能推送镜像。 报错信息提示&#xff1a;connect: connection refused 故障原因&#xff1a; harbor.yml 中的external_url参数写错。这个是提供外部访问。页面请求地址和…

Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如何在 Java 中应用这些原则?

面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。在 Java 中&#xff0c;面向对象编程的四个基本原则是封装、继承、多态和抽象。每个原则都有其特定的目标&#xff0c;帮助开发者构建更加模块化、可维护和可扩展的代码。 封装 …

ImmersiveTranslate:一键中英对照,Google Chrome上不可或缺的翻译利器

ImmersiveTranslate&#xff1a;一键中英对照&#xff0c;Google Chrome上不可或缺的翻译利器 基本介绍 ImmersiveTranslate 是一款为Google Chrome用户设计的翻译插件&#xff0c;旨在帮助用户轻松实现中英对照翻译。这款插件不仅适合普通用户&#xff0c;同时也为开发者提供…

CSS3动画——飞行的小精灵

CSS3动画——飞行的小精灵 今天的这段代码通过多层结构、渐变色、圆角、多种动画效果以及细节处理&#xff0c;成功地创造了一个充满活力和趣味性的飞行小精灵动画效果。 效果如下&#xff1a; 飞行的小精灵 源代码如下&#xff1a; <!DOCTYPE html> <html lang&quo…

呵,老板不过如此,SQL还是得看我

2018年7月&#xff0c;大三暑假进行时&#xff0c;时间过得飞快&#xff0c;我到这边实习都已经一个月了。 我在没工作之前&#xff0c;我老是觉得生产项目的代码跟我平时自学练的会有很大的区别。 以为生产项目代码啥的都会规范很多&#xff0c;比如在接口上会做很多安全性的…

@Tanstack/vue-query 的使用介绍

Tanstack/vue-query 的使用介绍 前言 在今年的vue conf 会议上&#xff0c;提到了vue-query这个库&#xff0c;这里对它的基本使用做一个介绍。 会议资料地址&#xff1a; https://vueconf.cn/ Tanstack-query的前身是react-query&#xff0c;是一个本地的服务端状态管理的库…

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range 环境 linux diffusers 0.30.0问题详情 报错详情 from diffusers import KolorsPipelineTraceback (most recent call last):File "Kolors/demo.py", line 6, in <module>pi…

Python编写BC260Y TCP数据收发压力测试脚本

Python编写BC260Y TCP数据收发压力测试脚本 使用BC260Y的TCP AT命令发送数据时&#xff0c;能够在数据中带有’\r\n’&#xff08;回车换行&#xff09;&#xff0c;而其他模组会将’\r\n’当做AT命令处理的结束符&#xff0c;例如EC800E&#xff0c;为了验证TCP数据中带有’\r…

【小呆的热力学笔记】典型热机-燃气轮机的理想热力循环

文章目录 6.1 燃气轮机的理想热力循环6.2 燃气轮机理想热力循环热效率分析6.3 燃气轮机的理想热力循环讨论 6.1 燃气轮机的理想热力循环 燃气轮机装置主要包含三个部件&#xff1a;压气机、燃烧室和涡轮&#xff0c;详见下图示意。其中压气机主要有离心式和轴流式两种&#xf…

使用 树莓派3B+ 对日本葡萄园进行经济实惠的环境监测

对于 菊岛邦夫—Vineyard Kikushima 而言&#xff0c;Raspberry Pi 生态系统提供了支持和信息&#xff0c;通过基于温度和湿度监测的有针对性的最低限度杀虫剂方案&#xff0c;来提高葡萄的健康产量。 Vineyard Kikushima&#xff1a;http://vykikushima.greater.jp/vineyards…

docker4

​1、根据镜像创建容器 docker -it --name c0 centos:latest /bin/bash 安装应用 ctrlpq docker export -o centos.tar c0 docker import -m "山不像我走来&#xff0c;我便向山走去" centos.tar centos:httpd docker commit c0 centos:v2 一、docker file应用 …