leetcode(51-55)

前端JavaScript力扣HOT100刷题【51-100】 注:纯手打,如有错误欢迎评论区交流!编写此文是为了更好地学习前端知识,如果损害了有关人的利益,请联系删除!本文章将不定时更新,敬请期待!!!!! 阅读详情

51. N皇后

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

上图为 8 皇后问题的一种解法。

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

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

示例:

输入: 4
输出: [
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> sol;
        vector<vector<int>> res;
        vector<int> arr;
        int end = n-1;
        int start = 0;
        for(int i = 0;i < n;++i)
            arr.push_back(i);
        Permutation(res, arr, start, end);
        convertSol(res, sol);
        return sol;
    }

    void convertSol(vector<vector<int>> &res, vector<vector<string>> &sol){
        for(int i = 0;i < res.size();++i){
            vector<string> vec;
            for(int j = 0;j < res[i].size();++j){
                int pos = res[i][j];
                int k = 0;
                string str;
                while(k < pos){
                    str += ".";
                    ++k;
                }
                str += "Q";
                ++k;
                while(k < res[i].size()){
                    str += '.';
                    ++k;
                }
                vec.push_back(str);
            }
            sol.push_back(vec);
         }
    }

    void Permutation(vector<vector<int>> &res, vector<int> &arr, int start, int end){
        if(start == end){
            bool flag = true;
            for(int i = 0;i < end;++i){
                for(int j = 0;j <= end;++j){
                    if(i != j && (abs(arr[i] - arr[j]) == abs(i-j))){
                        flag = false;
                        break;
                    }//if
                }//for
                if(!flag)
                    break;
            }//for
            if(flag)
                res.push_back(arr);
        }

        for(int i = start;i <= end;i++){
            swap(arr[i], arr[start]);
            Permutation(res, arr, start+1, end);
            swap(arr[i], arr[start]);
        }
    }


};

52. N皇后 II

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

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

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

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
class Solution {
public:
    int totalNQueens(int n) {
        vector<vector<string>> sol;
        vector<vector<int>> res;
        vector<int> arr;
        int end = n-1;
        int start = 0;
        for(int i = 0;i < n;++i)
            arr.push_back(i);
        Permutation(res, arr, start, end);
        convertSol(res, sol);
        return sol.size();
    }

    void convertSol(vector<vector<int>> &res, vector<vector<string>> &sol){
        for(int i = 0;i < res.size();++i){
            vector<string> vec;
            for(int j = 0;j < res[i].size();++j){
                int pos = res[i][j];
                int k = 0;
                string str;
                while(k < pos){
                    str += ".";
                    ++k;
                }
                str += "Q";
                ++k;
                while(k < res[i].size()){
                    str += '.';
                    ++k;
                }
                vec.push_back(str);
            }
            sol.push_back(vec);
         }
    }

    void Permutation(vector<vector<int>> &res, vector<int> &arr, int start, int end){
        if(start == end){
            bool flag = true;
            for(int i = 0;i < end;++i){
                for(int j = 0;j <= end;++j){
                    if(i != j && (abs(arr[i] - arr[j]) == abs(i-j))){
                        flag = false;
                        break;
                    }//if
                }//for
                if(!flag)
                    break;
            }//for
            if(flag)
                res.push_back(arr);
        }

        for(int i = start;i <= end;i++){
            swap(arr[i], arr[start]);
            Permutation(res, arr, start+1, end);
            swap(arr[i], arr[start]);
        }
    }
};

53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        return (max_sub(nums,0,nums.size()-1));
    }
    
    int max_sub(vector<int>& nums,int left,int right)
    {
        if(left == right)
            return nums[left];
            
        int center,left_sum,right_sum,s1=INT_MIN,s2=INT_MIN,l=0,r=0;
        center = (left + right)/2;   
        left_sum=max_sub(nums,left,center);    
        right_sum=max_sub(nums,center+1,right);
        for(int i = center;i>=left;i--)
        {
            l = l+nums[i];
            if(s1<l) s1= l;
        }        
        for(int i = center+1;i<=right;i++)
        {
            r = r+nums[i];
            if(s2<r) s2= r;
        }        
        if(left_sum > right_sum && left_sum > (s1+s2))
            return left_sum;
        else if(right_sum > (s1+s2))
            return right_sum;
        else return s1+s2;
    }
};

54. 螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.size()==0) return res;
        int numi = matrix.size();
        int numj = matrix[0].size();
        int loop = numi>numj?(numj+1)/2:(numi+1)/2;
        for(int i=0; i<loop; i++,numi-=2,numj-=2){
            for(int col=i; col<i+numj; col++) res.push_back(matrix[i][col]);
            for(int row=i+1; row<i+numi; row++) res.push_back(matrix[row][i+numj-1]);
            if(numi==1 || numj==1) break;
            for(int col=i+numj-2; col>=i; col--) res.push_back(matrix[i+numi-1][col]);
            for(int row=i+numi-2; row>i; row--) res.push_back(matrix[row][i]);
        }
        return res;
    }
};

55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size();
        int maxnum = 0;
        for(int i=0; i<=n; i++){
            if(i>maxnum) return false;
            maxnum = max(maxnum, i+nums[i]);
            if(maxnum >= n-1) return true;
        }
    }
};

(以上题目均摘自leetcode)

LeetCode+ 51 - 55 回溯、动态规划专题 给出一个国际象棋的棋盘,有 n 行、n 列 要在这个棋盘里面摆放 n 个皇后,国际象棋里面的皇后可以横着走,竖着走,而且可以斜着走,要在这个棋盘上摆放 n 个皇后,要求这 n 个皇后之间是不能被攻击到的,要求不能有两个皇后子在同一行、同一列、或者在同一条对角线上,要求输出所有方案动态回溯、N皇后问题_小雪菜本菜的博客-优快云博客直接搜索就可以了,搜索之前观察一些性质: 由于所有皇后之间是不能相互攻击到的,所以每一行最大只能放一个皇后,由于要放 n 个皇后,一共有 n 行,所以每行恰好放一个皇后,接下来想一 阅读详情

相关推荐

研一脑电小白日记 之 EEGLAB预处理实战指南

本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。

weixin_29230649的博客 557

Leetcode Hot100 51-55

细节:添加path的时候需要new创建一个新的值,因为是值传递,只传path,会都指向该地址。当回溯对象是固定时,for遍历只需遍历固定元素。1.不是组合,递归的时候是begin+1。2.用String数组存储电话号。

Tom336853的博客 284

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

LeetCode 51~55

前言 本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构请见LeetCode 刷题汇总 正文 幕布 幕布链接 51. N 皇后 题解 回溯算法(转换成全排列问题 + 剪枝)- 题解后有相关问题 3个set,i,row+i,row-i import scala.collection.mutable.{ListBuffer, Set} object Solution { val col, diagonal1, di

Shockang的博客 6132

群晖NAS下docker安装MySql

本文将一步一步讲解如何在群晖NAS的docker中启用一个MySQL容器 , 算是初学者对问题解决的一个记录.

qq_46375248的博客 5977

DCM、PLL以及DLL等概念及详情

介绍DLL、PLL以及DCM的概念,总结其模块构成、工作原理、相互之间的差异与各自优势。

CLL_caicai的博客 8338

【LeetCode Solutions】LeetCode 51 ~ 55 题解

【LeetCode Solutions】LeetCode 51 ~ 55 题解

一只快乐的小蒟蒻~ 788

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3294

【JavaScript】LeetCode:51-55

【代码】【JavaScript】LeetCode:51-55。

weixin_45980065的博客 642

股票价格预测的秘密武器:用C#实现蒙特卡洛路径模拟,轻松掌握市场波动规律!

摘要: 蒙特卡洛模拟是股票预测的有效工具,通过随机抽样模拟价格路径,克服传统技术分析的局限性。其核心模型是几何布朗运动(GBM),描述股价随机变化过程。C#实现的关键步骤包括:1)获取输入参数;2)生成随机数路径;3)分析结果。该方法不预测具体价格,而是提供可能的价格范围,帮助投资者评估风险。代码结构清晰,分为输入、模拟、分析和可视化四个模块,通过参数封装提高可读性,适用于不确定市场的概率预测。

墨夶的博客 601

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2786

LeetCode Week 6:第 51 ~ 55 题

专栏——LeetCode 文章目录专栏——LeetCode51. N 皇后52. N皇后 II53. 最大子序和54. 螺旋矩阵55. 跳跃游戏 51. N 皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后问题的一种解法。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 示例: 输入:4 输出:[ [".Q…",

逐梦er的博客 3616

【教程4>第2章>第19节】 GMSK解调系统的FPGA开发与matlab对比验证

MSK(Minimum Shift Keying,最小频移键控)和GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)都是数字调制技术,主要用于无线通信系统中将数字信号转换为模拟信号进行传输。它们都是连续相位移键控(Continuous Phase Shift Keying, CPK)的一种形式,意味着相邻码元之间没有相位跳变的突变,而是连续过渡,这有助于减少信号带宽和降低邻道干扰。GMSK的解调过程与MSK类似,我们这里还是采用和MSK解调一样的1bit解调方法。

FPGA/MATLAB学习教程/源码/项目合作开发 1221

LeetCode 实践练习51-55

LeetCode—51(N皇后问题) 方法:经典的N皇后问题,基本所有的算法书都会包含的问题,经典的解法为回溯递归,一层层的向下扫描,需要用到一个pos数组,其中pos[i]表示第i行皇后的位置,初始化为-1,然后从第0开始递归,每一行都一次遍历各列,判断如果在该位置皇后会不会有冲突,依次类推,当到最后一个皇后放好后,一种解法就生成了,将其存入结果res中,再继续。 C++代码: class S...

qq_40104034的博客 192

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

leetCode 51-55

##环形链表 II

fan__lee的博客 272

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

力扣爆刷第113天之CodeTop100五连刷51-55

思路:零钱数量无限,正序遍历,求达到总数所需的最少硬币数,定义dp[i]表示,装满 i 所需的最少硬币数,那么,动态规划的状态转移,一定是从上一个硬币位置开始的,也就是 i - coins[j],这个位置,即 dp[i - coins[j]],上一个硬币位置只要是有值的,那么就可以推导出状态转移,是dp[i]=dp[i - coins[j]] + 1,当然还得再和自身历史值进行比较,留下最小值。思路:典型滑动窗口,维护好一个变量值,作为进入滑动窗口的契机,没进入时扩大右边界,进入时,缩小左边界。

qq_43511039的博客 512

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

力扣爆刷第93天之hot100五连刷51-55

题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/description/?题目链接:https://leetcode.cn/problems/number-of-islands/description/?思路:根据题目要求需要构建邻接表,然后我们要判断邻接表是否成环,visited数组使用来记录访问过的节点,避免重复访问,flags数组是用来记录从任意一个节点出发是否成环,如果成环则无法完成课程表。

qq_43511039的博客 425

每日5题Day11 - LeetCode 51 - 55

【代码】每日5题Day11 - LeetCode 51 - 55。

alimamaalala的博客 350

leetcode题解python版:51-55

51、N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 提示: 皇后,是国际象棋中的棋子,意味着国王的妻子。皇后只做一件事,那就是“吃子”。当她遇见可以吃的棋子时,就迅速冲上去吃掉棋子。当然,她横、竖、斜都可走一到N-1步,可进可退。 解:本题用深度优先算法,一行一行推进。可以设立三个列

baidu_41689104的博客 318

Leetcode -- Day 51 & Day 55

Leetcode -- Day 51 & Day 55 String to Integer (atoi) / valid number Question 1 String to Integer (atoi) Implementatoito convert a string to an integer. Hin...

weixin_30878361的博客 73

面试笔试杂项积累-leetcode 51-55

53.53-Maximum Subarray-Difficulty:Medium Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,

wolf96的专栏 524

力扣爆刷第1567之TOP100五连刷51-55(滑动窗口、零钱兑换、最小覆盖子串)

思路:求缺失的第一个正数,要求时间复杂度o(n),本身不能排序,但是可以借助数组的索引来做一个映射关系,对于如何求缺失的第一个正数,对于固定长度的数组来说,如果数组中的元素值存在超出数组长度的情况,那么数组中就一定在[1, len]不是连续的,那么我们只需要把超出范围的给排除掉,然后把位于范围内的与数组的索引进行映射,但凡能映射上的,也给进行区别标识,比如设置为负数,然后再从头到尾遍历,第一个大于0的元素所对应的索引就是缺失的第一个正数。

qq_43511039的博客 626

Python小白 Leetcode刷题历程 No.51-No.55 N皇后、N皇后Ⅱ、最大子序和、螺旋矩阵、跳跃游戏 (有题干 有代码 有思路心得)

Python小白 Leetcode刷题历程 No.51-No.55 N皇后、N皇后Ⅱ、最大子序和、螺旋矩阵、跳跃游戏 写在前面: 作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,作为一个小白,实习也莫得路子,又不想白白耗费时间。于是选择了Leetcode这个平台来刷题库。编程我只学过基础的C语言,现在在自学Python,所以用Pytho...

LanXiu_的博客 696

LeetCode 51 ~ 60

LeetCode 51. N 皇后 因为每行每列每条对角线都只能有一个皇后,所以可以将各行的皇后映射到同一列上,枚举每列每条对角线是否有皇后。 接着分析,对角线上的皇后。 皇后坐标为(i,j) 正对角线映射到一个数组dg中,由于此时i = j + c1的c1可能为负数,所以需要加上一个偏移量保证c1为正数,用dg[i - j + n] 记录这条正对角线 反对角线映射到一个数组udg,此时i = - j + c2 ,c2必定为正数,用udg[ i + j ]记录这条反对角线 在回溯的过程中只要满足!col[

MINGgoS的博客 393

leetcode(力扣)刷题笔记(c++)【中】

leetcode:贪心算法&动态规划

qq_43050258的博客 1332

力扣[LeetCode]-面试150Java代码实现

为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

kearily的博客 1222
上一篇: 机器学习---朴素贝叶斯
下一篇: leetcode(56-60)
小小螺丝刀
博客等级 码龄10年 41粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值