首页 > 编程语言 >力扣51 N皇后 Java版本

力扣51 N皇后 Java版本

时间:2024-04-10 10:58:24浏览次数:32  
标签:char used Java int 51 力扣 desk 皇后 row

文章目录


题目描述

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

示例 1:
在这里插入图片描述

输入:n = 4
输出:[[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:

输入:n = 1
输出:[[“Q”]]

提示:

1 <= n <= 9

代码

class Solution {
    public List<List<String>> result = new ArrayList<>();
    public LinkedList<String> path = new LinkedList<>();

    public List<List<String>> solveNQueens(int n) {
        //创建一个二维数组用来标记是否这个位置使用
        boolean[][] used = new boolean[n][n];
        for(boolean[] c:used){
            Arrays.fill(c,false);
        }
        char[][] desk = new char[n][n];
        for(char[] c:desk){
            Arrays.fill(c,'.');
        }
        backTracking(desk,n,0,used);
        return result;
    }

    public void backTracking(char[][] desk, int n, int row,boolean[][] used) {//需要传递现在的棋盘、总数n、现在的行数
        //递归出口
        if (row == n) {
            //棋盘所有的行都已经存在一个皇后了,所以满足条件
            result.add(toResult(desk));
            return;
        }

        for (int j = 0; j < n; j++) {//j表示要放置皇后位置的纵坐标
            if (isOk(desk, row, j, n,used)) {
                desk[row][j] = 'Q';
                used[row][j] = true;
                backTracking(desk, n, row + 1,used);
                desk[row][j] = '.';
                used[row][j] = false;
            }
        }

    }

    //用来判断是否可以放置
    public boolean isOk(char[][] desk, int x, int y, int n,boolean[][] used) {

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (used[i][j]==true){
                    //如果是当前位置就跳过
                    if (x==i&&y==j){
                        continue;
                    }
                    //和当前位置是同一行或者同一列都不行
                    if (i==x||j==y){
                        return false;
                    }
                    //在一个斜线上也不行
                    if ((i-x)==(j-y)||(i-x)==(y-j)){
                        return false;
                    }
                }
            }
        }
        return true;
    }

    //用来将二维数组转换为字符串
    public List toResult(char[][] desk) {
        List<String> list = new ArrayList<>();
        for (char[] c :desk) {
            list.add(String.copyValueOf(c));
        }
        return list;
    }
}

标签:char,used,Java,int,51,力扣,desk,皇后,row
From: https://blog.csdn.net/m0_47066863/article/details/137564268

相关文章

  • Java面试题-13Spring
    1、事务管理spring事务分为编程式事务和声明式事务Spring事务管理器的行为的重要组成部分。下面是对这些属性的简要解释:1.**value**:用于指定事务管理器的名称。如果应用中只有一个事务管理器,通常可以省略该属性。2.**propagation**:指定事务的传播机制,即在多个事务方法相互调......
  • java synchronized 还是用redis 锁 java的synchronized的实现原理
    synchronized是同步的意思,在java多线程中,我们一般会考虑共享数据的处理,共享数据的处理包含两块,第一是共享数据,第二是在多线程访问共享数据的时候,如果处理共享数据,保证数据的有效正确性。我们要保证线程A访问共享数据,对数据进行处理的时候,其他线程能够等待线程A访问完毕后,和线程A看......
  • 力扣经典150题第十三题:除自身以外数组的乘积
    目录力扣经典150题第十三题:除自身以外数组的乘积1.简介2.问题分析3.解题思路方法一:左右乘积列表方法二:优化空间复杂度4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十三题:除自身以外数组的乘积1.简介本文介绍如何设计一个算......
  • 基于java+springboot+vue实现的农产品智慧物流系统(文末源码+Lw)23-239
    摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用农产品智慧物流系统可以有效管理,使信息管......
  • 基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242
    摘 要使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的人事管理系统对字典管理、公告管理、绩效管理、......
  • IDEA打包JavaWeb项目
    1.File->ProjectStructure2.Artifacts->"+"->WebApplicationExploded->FromModules弹框选择对应Module,点击ok3."+"->WebApplicationArchive->For'xxx:warexploded'->最后点击"OK"4.Build->Build......
  • Java 动态代理给对象插入动态属性
    packagecom.gwm.gwmcenterbudget.projectbudget.client.api.dto;importcom.google.common.collect.Maps;importnet.sf.cglib.beans.BeanGenerator;importnet.sf.cglib.beans.BeanMap;importorg.apache.commons.beanutils.PropertyUtilsBean;importorg.slf4j.Logge......
  • 详解Java Chassis 3与Spring Cloud的互操作
    本文分享自华为云社区《JavaChassis3技术解密:与SpringCloud的互操作》,作者:liubao68。JavaChassis3一个很重要的设计原则:利用架构的韧性设计来解决兼容性问题。比如通过引入微服务网关,来解决不同语言、不同框架、遗留系统之间的互操作问题。本文在这个架构原则基础上,讨论......
  • 最短编辑距离(线性dp)-java
    最短编辑问题也是一种非常经典的二维线性dp问题。 文章目录前言一、最短编辑距离问题二、算法思路1.dp[i][j]的情况 2.边界问题初始化3.状态转移方程三、代码如下1.代码如下2.读入数据3.代码运行结果总结前言最短编辑问题也是一种非常经典的二维线性dp问......
  • Java入门基础知识第八课(数组)——冒泡排序、Arrays工具类
    前面二白讲了关于数组的概念、语法以及简单的输入输出,实际上关于数组的知识还有很多,接下来咱们讲一下冒泡排序以及一些常用的Arrays工具类,需要记忆的知识很多,而且容易混淆。一、冒泡排序简介(原理)升序为例:从头开始,每次比较相邻两数小的交换到前面每轮结束后最大的数交换到......