LeetCode第五十二题-N皇后二(JAVA)

N-Queens II

问题简介:给定一个n*n的棋盘,求解如何将n个皇后放置在棋盘上, 保证其之间不互相攻击,即给定一个整数 n,返回所有不同的解决方案的个数

注:例如下图为n = 8 时的一个解

举例:

输入: 4

输出:2

解释: [

[".Q…", // Solution 1

“…Q”,

“Q…”,

“…Q.”],

["…Q.", // Solution 2

“Q…”,

“…Q”,

“.Q…”]

]

解法一:

利用递归,首先从第一行元素开始,逐行扫描判断,主要的关注点在于判断Q值的同列,斜向上是否有Q值,这里赋予值1代表’Q’值及’.‘为0,当判断斜向时,从左上到右下的方向上(x - y)值固定,从左下到右上的方向上(x + y)值固定,(x,y即横纵坐标),最后要注意递归时,值的清理,最后返回结果集合的size()

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

原文地址:https://www.cnblogs.com/lalalaczq/p/11026430.html

时间: 2024-08-30 08:54:10

LeetCode第五十二题-N皇后二(JAVA)的相关文章

【leetcode 简单】 第五十八题 计数质数

统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . class Solution: def countPrimes(self, n): """ :type n: int :rtype: int """ isPrime = [1] * max(2, n) isPrime[0],isPrime[1]=False,False x = 2 while x

【leetcode 简单】 第五十九题 同构字符串

给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一个字符上,但字符可以映射自己本身. 示例 1: 输入: s = "egg", t = "add" 输出: true 示例 2: 输入: s = "foo", t = "bar" 输出: false 示例 3: 输入: s = &q

《剑指offer》第五十九题(队列的最大值)

// 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个 // 滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}, #include <iostream> #include <deque> #include <exception> using namespace std; template&l

LeetCode第三十四题-寻找数组中对应目标值的首尾索引

Find First and Last Position of Element in Sorted Array 问题简介:给定按升序排序的整数数组,找到给定目标值的起始位置和结束位置. 注: 1.算法的运行时复杂度必须为O(log n) 2.如果在数组中找不到目标,则返回[-1,-1] 举例: 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1

LeetCode第四十八题-旋转图像

Rotate Image 问题简介: 给定一个可以用图像形容的n x n 的2D矩阵,将这个图像即数组顺时针旋转90度 注: 只能更改给定的数组,不允许通过另一个数组或集合来解决 举例: 1: 给定数组:matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 旋转后结果: [ [7,4,1], [8,5,2], [9,6,3] ] 2: 给定数组:matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,

调整数组顺序使奇数位于偶数前面 【微软面试100题 第五十四题】

题目要求: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 要求时间复杂度为O(n). 参考资料:剑指offer第14题. 题目分析: 使用两个指针,pBegin和pEnd,pBegin从开头往后遍历,pEnd从结尾往前遍历,当pBegin遇到偶数和pEnd遇到奇数时,交换两个数,然后继续遍历,直到pBegin>pEnd,则结束. 代码实现: #include <iostream> using namespace std; void

第五十八题(从尾到头输出链表)

58.从尾到头输出链表. 题目:输入一个链表的头结点,从尾到头反过来输出每一个结点的值. 思路:题不难,提供几种思路 1.使用栈的先进后出特性实现,遍历链表元素依次入栈,再出栈就可以达到目的 2.使用数组先暂存顺序遍历的结果,再对数组反向遍历就可以. 3.递归,也就是这里採用的方法. C++代码: #include "stdafx.h" #include<ctime> #include<iostream> namespace MS100P_58 { void r

《剑指offer》第五十八题(左旋转字符串)

// 面试题58(二):左旋转字符串 // 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. // 请定义一个函数实现字符串左旋转操作的功能.比如输入字符串"abcdefg"和数 // 字2,该函数将返回左旋转2位得到的结果"cdefgab". #include <iostream> #include <string> void Reverse(char *pBegin, char *pEnd); char* LeftR

leecode第五十九题(螺旋矩阵 II)

class Solution { public: vector<vector<int>> generateMatrix(int n) { if(n==0)//特殊情况 { vector<vector<int>> empty; return empty; } vector<vector<int>> res; for(int i=0;i<n;i++)//要先初始化 { vector<int> zeros; for(int