51. N 皇后

难度困难603

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

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

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

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

示例:

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

提示:

  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

判断j == col || i + j === row + col || i - j === row - col妙啊

class Solution {
public:vector<vector<string>> ans;bool isValid(vector<string> s,int row,int col,int n){for (int i = 0; i < row; i++) { // 之前的行for (int j = 0; j < n; j++) { // 所有的列if (s[i][j] == 'Q' &&   // 发现了皇后,并且和自己同列/对角线(j == col || i + j == row + col || i - j == row - col)) {return false;             // 不是合法的选择}}}return true;}void get(int index,int sum,vector<string> &s){if(index==sum){ans.push_back(s);return;}for(int i=0;i<sum;i++){if(isValid(s,index,i,sum)){s[index][i]='Q';get(index+1,sum,s);s[index][i]='.';}}}vector<vector<string>> solveNQueens(int n) {vector<string> s(n, string(n, '.'));get(0,n,s);return ans;}
};

51题和52题一样

53. 最大子序和

难度简单2414

给定一个整数数组 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) {int maxn=nums[0];vector<int> dp(nums.size());for(int i=0;i<nums.size();i++){dp[i]=nums[i];}for(int i=1;i<nums.size();i++){dp[i]=max(dp[i-1]+nums[i],nums[i]);if(dp[i]>maxn) maxn=dp[i];}return maxn;}
};

54. 螺旋矩阵

难度中等489

给定一个包含 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> ans;int n=matrix.size();int x=0;int y=0;if(n==0) return ans;int m=matrix.size();n=matrix[0].size();int cnt=m*n;while(cnt){for(int j=y;j<n;j++){ans.push_back(matrix[x][j]);cnt--;}if(cnt==0) break;x++;for(int i=x;i<m;i++){ans.push_back(matrix[i][n-1]);cnt--;}if(cnt==0) break;n--;for(int j=n-1;j>=y;j--){ans.push_back(matrix[m-1][j]);cnt--;}if(cnt==0) break;m--;for(int i=m-1;i>=x;i--){ans.push_back(matrix[i][y]);cnt--;}if(cnt==0) break;y++;}return ans;}
};

55. 跳跃游戏

难度中等813

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

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

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

示例 1:

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

示例 2:

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

56. 合并区间

难度中等602

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

注意:输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。

提示:

  • intervals[i][0] <= intervals[i][1]
class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end());vector<vector<int>> ans;if(intervals.size()<=1) return intervals;// 以下是一个一个合并,等到结尾or无法合并时push_back.int x=intervals[0][0];int y=intervals[0][1];for(int i=1;i<intervals.size();i++){int tx=intervals[i][0];int ty=intervals[i][1];if(tx>y){ans.push_back({x,y});if(i==intervals.size()-1) ans.push_back({tx,ty});x=tx;y=ty;}else{x=min(x,tx);y=max(y,ty);if(i==intervals.size()-1) ans.push_back({x,y});}}// for(int i=0;i<intervals.size();){//注意没有动作。//     //区间左端点确定为intervals[i][0],寻找右端点//     int t=intervals[i][1];//     int j=i+1;//     while(j<intervals.size()&&intervals[j][0]<=t){//         t=max(t,intervals[j][1]);j++;//     }//     ans.push_back({intervals[i][0],t});//     i=j;// }return ans;}
};

58. 最后一个单词的长度

难度简单240

给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串

示例:

输入: "Hello World"
输出: 5

写的啥啊,脑袋疼....

class Solution {
public:int lengthOfLastWord(string s) {if(s.size()==1&&s[0]!=' ') return 1;for(int i=s.size()-1;i>=0;i--){if(s[i]!=' '){int cnt=1;while(i--){if(i>=0&&s[i]==' ') break; cnt++;if(i==0) break;}return cnt;}}return 0;}
};
class Solution {
public:int lengthOfLastWord(string s){int len = s.size(), lastWordLen = 0;if (len == 0) return 0;for (int i = len - 1; i >= 0; i--) {if (s[i] != ' ') lastWordLen++;if (s[i] == ' ' && lastWordLen > 0) break;}return lastWordLen;}
};

59. 螺旋矩阵 II

难度中等236

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]
]
class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans(n,vector<int>(n));int x=0;int y=0;if(n==0) return ans;int m=n;int cnt=m*n;int num=1;while(cnt){for(int j=y;j<n;j++){ans[x][j]=num++;cnt--;}if(cnt==0) break;x++;for(int i=x;i<m;i++){ans[i][n-1]=num++;cnt--;}if(cnt==0) break;n--;for(int j=n-1;j>=y;j--){ans[m-1][j]=num++;cnt--;}if(cnt==0) break;m--;for(int i=m-1;i>=x;i--){ans[i][y]=num++;cnt--;}if(cnt==0) break;y++;}return ans;}
};

60. 第k个排列

难度中等381

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 n 和 k,返回第 k 个排列。

说明:

  • 给定 n 的范围是 [1, 9]。
  • 给定 的范围是[1,  n!]。

示例 1:

输入: n = 3, k = 3
输出: "213"

示例 2:

输入: n = 4, k = 9
输出: "2314"

回溯,狗头,睡个午觉先...

LeetCode 51-60题相关推荐

  1. [Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯搜索算法 + 剪枝 ,直接来到叶子结点 时间复杂度:O(N^2) 空间复杂度:O(N) import java.util.Arrays;public cl ...

  2. 数据库SQL实战(牛客网真题)51~60题

    文章目录 SQL51 查找字符串中逗号出现的次数 知识点:replace函数 SQL52 获取employees中的first_name 知识点:left,right,substr/substring ...

  3. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  4. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

  5. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  6. [Leetcode][第216题][JAVA][数组之和3][回溯]

    [问题描述][中等] [解答思路] 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer> ...

  7. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  8. [Leetcode][第77题][JAVA][组合][回溯]

    [问题描述][中等] [解答思路] 1. 回溯 class Solution {List<List<Integer>> lists = new ArrayList<> ...

  9. 【人工智能 机器学习 深度学习】基础选择题 31~60题 练习(题目+答案),亦含 判断题

    目录 一.前情回顾 二.31~40题 2.1 题目 2.2 答案 三.41~50题 3.1 题目 3.2 答案 四.51~60题 4.1 题目 4.2 答案 一.前情回顾 [人工智能 & 机器 ...

  10. LeetCode Week 6:第 51 ~ 55 题

    专栏--LeetCode 文章目录 专栏--LeetCode 51. N 皇后 52. N皇后 II 53. 最大子序和 54. 螺旋矩阵 55. 跳跃游戏 51. N 皇后 n 皇后问题研究的是如何 ...

最新文章

  1. AAAI2022最新「关系数据因果推理」报告,181页PPT阐述因果推理在网络数据中研究进展...
  2. 区块链如何应用于保险行业
  3. 《Neo4j全栈开发》_陈韶健
  4. android textView调整字体的间距和行间距
  5. (11) nginx + keepalived 双机热备
  6. 家庭接入: dsl 电缆ftth 拨号和卫星_家庭宽带的路由器升级之路
  7. python编写安全工具_Python3学习系列(四):编写属于自己的邮件伪造工具
  8. [算法]两个栈实现一个队列
  9. 用QXmlStreamWriter写入xml
  10. shell初级-----更多结构化命令
  11. 零基础学习编程大概需要多久?
  12. efi分区格式化操作
  13. E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试
  14. 房屋管理小程序的功能
  15. 2.1安装前的准备工作---安装Red Hat Linux
  16. 855 AIMA学习笔记(by菜菜子)
  17. 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》
  18. 包飞机接员工,浙江这个县拼了!大数据告诉你:全国哪里复工率最高?哪些行业最先复苏?...
  19. Sexy Little Numbers - 电子书下载(高清版PDF格式+EPUB格式)
  20. 这几款免费的解说配音软件,非常适合制作解说视频

热门文章

  1. 推荐一个小巧强大的代码编辑器
  2. docker mysql volum_Docker --volume(数据持久化)
  3. Python3 将汉语转换为汉语拼音
  4. 解决在页面中无法获取qrcode.js生成的base64的图片
  5. matlab获取图片上的字,基于MATLAB图片中文字提取及识别.pdf
  6. 航顺HK32F030MF4P6 RST作GPIO SWCLK作EXTI5 SWDIO作ADC_AIN0
  7. 全球名校课程作业分享系列(9)--斯坦福CS231n之RNN与计算机看图说话
  8. 1.2 Python介绍
  9. matlab命令批量重命名,MATLAB中预定义对话框之文件打开对话框以及如何批量重命名...
  10. 4.19 使用QT做上位机与下位机通讯