Skip to content

Commit

Permalink
47~541连接更新‘
Browse files Browse the repository at this point in the history
  • Loading branch information
XuDaHaoRen committed Aug 23, 2021
1 parent acf1a54 commit 0a8191b
Show file tree
Hide file tree
Showing 103 changed files with 491 additions and 669 deletions.
2 changes: 1 addition & 1 deletion problems/0051.N皇后.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 第51题. N皇后

题目链接: https://leetcode-cn.com/problems/n-queens/
[力扣题目链接](https://leetcode-cn.com/problems/n-queens/)

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

Expand Down
2 changes: 1 addition & 1 deletion problems/0053.最大子序和.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 53. 最大子序和

题目地址:https://leetcode-cn.com/problems/maximum-subarray/
[力扣题目链接](https://leetcode-cn.com/problems/maximum-subarray/)

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

Expand Down
6 changes: 3 additions & 3 deletions problems/0053.最大子序和(动态规划).md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 53. 最大子序和

题目地址:https://leetcode-cn.com/problems/maximum-subarray/
[力扣题目链接](https://leetcode-cn.com/problems/maximum-subarray/)

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

Expand All @@ -19,7 +19,7 @@

## 思路

这道题之前我们在讲解贪心专题的时候用贪心算法解决过一次,[贪心算法:最大子序和](https://mp.weixin.qq.com/s/DrjIQy6ouKbpletQr0g1Fg)
这道题之前我们在讲解贪心专题的时候用贪心算法解决过一次,[贪心算法:最大子序和](https://programmercarl.com/0053.最大子序和.html)

这次我们用动态规划的思路再来分析一次。

Expand Down Expand Up @@ -87,7 +87,7 @@ public:
## 总结
这道题目用贪心也很巧妙,但有一点绕,需要仔细想一想,如果想回顾一下贪心就看这里吧:[贪心算法:最大子序和](https://mp.weixin.qq.com/s/DrjIQy6ouKbpletQr0g1Fg)
这道题目用贪心也很巧妙,但有一点绕,需要仔细想一想,如果想回顾一下贪心就看这里吧:[贪心算法:最大子序和](https://programmercarl.com/0053.最大子序和.html)
动规的解法还是很直接的。
Expand Down
2 changes: 1 addition & 1 deletion problems/0055.跳跃游戏.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 55. 跳跃游戏

题目链接:https://leetcode-cn.com/problems/jump-game/
[力扣题目链接](https://leetcode-cn.com/problems/jump-game/)

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

Expand Down
4 changes: 2 additions & 2 deletions problems/0056.合并区间.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 56. 合并区间

题目链接:https://leetcode-cn.com/problems/merge-intervals/
[力扣题目链接](https://leetcode-cn.com/problems/merge-intervals/)

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

Expand Down Expand Up @@ -126,7 +126,7 @@ public:

那应该怎么办呢?

正如我贪心系列开篇词[关于贪心算法,你该了解这些!](https://mp.weixin.qq.com/s/O935TaoHE9Eexwe_vSbRAg)中讲解的一样,贪心本来就没有套路,也没有框架,所以各种常规解法需要多接触多练习,自然而然才会想到。
正如我贪心系列开篇词[关于贪心算法,你该了解这些!](https://programmercarl.com/贪心算法理论基础.html)中讲解的一样,贪心本来就没有套路,也没有框架,所以各种常规解法需要多接触多练习,自然而然才会想到。

「代码随想录」会把贪心常见的经典题目覆盖到,大家只要认真学习打卡就可以了。

Expand Down
4 changes: 2 additions & 2 deletions problems/0059.螺旋矩阵II.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

## 59.螺旋矩阵II

题目地址:https://leetcode-cn.com/problems/spiral-matrix-ii/
[力扣题目链接](https://leetcode-cn.com/problems/spiral-matrix-ii/)
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:
Expand All @@ -33,7 +33,7 @@

结果运行的时候各种问题,然后开始各种修修补补,最后发现改了这里哪里有问题,改了那里这里又跑不起来了。

大家还记得我们在这篇文章[数组:每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/4X-8VRgnYRGd5LYGZ33m4w)中讲解了二分法,提到如果要写出正确的二分法一定要坚持**循环不变量原则**
大家还记得我们在这篇文章[数组:每次遇到二分法,都是一看就会,一写就废](https://programmercarl.com/0704.二分查找.html)中讲解了二分法,提到如果要写出正确的二分法一定要坚持**循环不变量原则**

而求解本题依然是要坚持循环不变量原则。

Expand Down
4 changes: 2 additions & 2 deletions problems/0062.不同路径.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 62.不同路径

题目链接:https://leetcode-cn.com/problems/unique-paths/
[力扣题目链接](https://leetcode-cn.com/problems/unique-paths/)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

Expand Down Expand Up @@ -40,7 +40,7 @@
示例 4:
输入:m = 3, n = 3
输出:6
 

提示:
* 1 <= m, n <= 100
* 题目数据保证答案小于等于 2 * 10^9
Expand Down
10 changes: 5 additions & 5 deletions problems/0063.不同路径II.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 63. 不同路径 II

题目链接:https://leetcode-cn.com/problems/unique-paths-ii/
[力扣题目链接](https://leetcode-cn.com/problems/unique-paths-ii/)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

Expand Down Expand Up @@ -49,11 +49,11 @@

## 思路

这道题相对于[62.不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A) 就是有了障碍。
这道题相对于[62.不同路径](https://programmercarl.com/0062.不同路径.html) 就是有了障碍。

第一次接触这种题目的同学可能会有点懵,这有障碍了,应该怎么算呢?

[62.不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A)中我们已经详细分析了没有障碍的情况,有障碍的话,其实就是标记对应的dp table(dp数组)保持初始值(0)就可以了。
[62.不同路径](https://programmercarl.com/0062.不同路径.html)中我们已经详细分析了没有障碍的情况,有障碍的话,其实就是标记对应的dp table(dp数组)保持初始值(0)就可以了。

动规五部曲:

Expand All @@ -77,7 +77,7 @@ if (obstacleGrid[i][j] == 0) { // 当(i, j)没有障碍的时候,再推导dp[i

3. dp数组如何初始化

[62.不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A)不同路径中我们给出如下的初始化:
[62.不同路径](https://programmercarl.com/0062.不同路径.html)不同路径中我们给出如下的初始化:

```
vector<vector<int>> dp(m, vector<int>(n, 0)); // 初始值为0
Expand Down Expand Up @@ -159,7 +159,7 @@ public:
## 总结
本题是[62.不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A)的障碍版,整体思路大体一致。
本题是[62.不同路径](https://programmercarl.com/0062.不同路径.html)的障碍版,整体思路大体一致。
但就算是做过62.不同路径,在做本题也会有感觉遇到障碍无从下手。
Expand Down
6 changes: 3 additions & 3 deletions problems/0070.爬楼梯.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>

## 70. 爬楼梯
题目地址:https://leetcode-cn.com/problems/climbing-stairs/
[力扣题目链接](https://leetcode-cn.com/problems/climbing-stairs/)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

Expand Down Expand Up @@ -196,9 +196,9 @@ public:
## 总结
这道题目和[动态规划:斐波那契数](https://mp.weixin.qq.com/s/ko0zLJplF7n_4TysnPOa_w)题目基本是一样的,但是会发现本题相比[动态规划:斐波那契数](https://mp.weixin.qq.com/s/ko0zLJplF7n_4TysnPOa_w)难多了,为什么呢?
这道题目和[动态规划:斐波那契数](https://programmercarl.com/0509.斐波那契数.html)题目基本是一样的,但是会发现本题相比[动态规划:斐波那契数](https://programmercarl.com/0509.斐波那契数.html)难多了,为什么呢?
关键是 [动态规划:斐波那契数](https://mp.weixin.qq.com/s/ko0zLJplF7n_4TysnPOa_w) 题目描述就已经把动规五部曲里的递归公式和如何初始化都给出来了,剩下几部曲也自然而然的推出来了。
关键是 [动态规划:斐波那契数](https://programmercarl.com/0509.斐波那契数.html) 题目描述就已经把动规五部曲里的递归公式和如何初始化都给出来了,剩下几部曲也自然而然的推出来了。
而本题,就需要逐个分析了,大家现在应该初步感受出[关于动态规划,你该了解这些!](https://leetcode-cn.com/circle/article/tNuNnM/)里给出的动规五部曲了。
Expand Down
13 changes: 6 additions & 7 deletions problems/0070.爬楼梯完全背包版本.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

## 70. 爬楼梯

链接:https://leetcode-cn.com/problems/climbing-stairs/
[力扣题目链接](https://leetcode-cn.com/problems/climbing-stairs/)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

Expand All @@ -38,7 +38,7 @@

## 思路

这道题目 我们在[动态规划:爬楼梯](https://mp.weixin.qq.com/s/Ohop0jApSII9xxOMiFhGIw) 中已经讲过一次了,原题其实是一道简单动规的题目。
这道题目 我们在[动态规划:爬楼梯](https://programmercarl.com/0070.爬楼梯.html) 中已经讲过一次了,原题其实是一道简单动规的题目。

既然这么简单为什么还要讲呢,其实本题稍加改动就是一道面试好题。

Expand All @@ -52,7 +52,7 @@

**此时大家应该发现这就是一个完全背包问题了!**

和昨天的题目[动态规划:377. 组合总和 Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)基本就是一道题了。
和昨天的题目[动态规划:377. 组合总和 Ⅳ](https://programmercarl.com/0377.组合总和Ⅳ.html)基本就是一道题了。

动规五部曲分析如下:

Expand All @@ -62,7 +62,7 @@

2. 确定递推公式

[动态规划:494.目标和](https://mp.weixin.qq.com/s/2pWmaohX75gwxvBENS-NCw)[动态规划:518.零钱兑换II](https://mp.weixin.qq.com/s/PlowDsI4WMBOzf3q80AksQ)[动态规划:377. 组合总和 Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)中我们都讲过了,求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];
[动态规划:494.目标和](https://programmercarl.com/0494.目标和.html)[动态规划:518.零钱兑换II](https://programmercarl.com/0518.零钱兑换II.html)[动态规划:377. 组合总和 Ⅳ](https://programmercarl.com/0377.组合总和Ⅳ.html)中我们都讲过了,求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];

本题呢,dp[i]有几种来源,dp[i - 1],dp[i - 2],dp[i - 3] 等等,即:dp[i - j]

Expand All @@ -84,12 +84,11 @@

5. 举例来推导dp数组

介于本题和[动态规划:377. 组合总和 Ⅳ](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)几乎是一样的,这里我就不再重复举例了。
介于本题和[动态规划:377. 组合总和 Ⅳ](https://programmercarl.com/0377.组合总和Ⅳ.html)几乎是一样的,这里我就不再重复举例了。


以上分析完毕,C++代码如下:

```cpp
```
class Solution {
public:
int climbStairs(int n) {
Expand Down
4 changes: 2 additions & 2 deletions problems/0072.编辑距离.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 72. 编辑距离

https://leetcode-cn.com/problems/edit-distance/
[力扣题目链接](https://leetcode-cn.com/problems/edit-distance/)

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

Expand All @@ -35,7 +35,7 @@ inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')
 


提示:

Expand Down
8 changes: 4 additions & 4 deletions problems/0077.组合.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

# 第77题. 组合

题目链接:https://leetcode-cn.com/problems/combinations/
[力扣题目链接](https://leetcode-cn.com/problems/combinations/ )

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

Expand Down Expand Up @@ -80,7 +80,7 @@ for (int i = 1; i <= n; i++) {

如果脑洞模拟回溯搜索的过程,绝对可以让人窒息,所以需要抽象图形结构来进一步理解。

**我们在[关于回溯算法,你该了解这些!](https://mp.weixin.qq.com/s/gjSgJbNbd1eAA5WkA-HeWw)中说道回溯法解决的问题都可以抽象为树形结构(N叉树),用树形结构来理解回溯就容易多了**
**我们在[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)中说道回溯法解决的问题都可以抽象为树形结构(N叉树),用树形结构来理解回溯就容易多了**

那么我把组合问题抽象为如下树形结构:

Expand All @@ -100,7 +100,7 @@ for (int i = 1; i <= n; i++) {

相当于只需要把达到叶子节点的结果收集起来,就可以求得 n个数中k个数的组合集合。

[关于回溯算法,你该了解这些!](https://mp.weixin.qq.com/s/gjSgJbNbd1eAA5WkA-HeWw)中我们提到了回溯法三部曲,那么我们按照回溯法三部曲开始正式讲解代码了。
[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)中我们提到了回溯法三部曲,那么我们按照回溯法三部曲开始正式讲解代码了。


## 回溯法三部曲
Expand Down Expand Up @@ -214,7 +214,7 @@ public:
};
```
还记得我们在[关于回溯算法,你该了解这些!](https://mp.weixin.qq.com/s/gjSgJbNbd1eAA5WkA-HeWw)中给出的回溯法模板么?
还记得我们在[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)中给出的回溯法模板么?
如下:
```
Expand Down
4 changes: 2 additions & 2 deletions problems/0077.组合优化.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@



[回溯算法:求组合问题!](https://mp.weixin.qq.com/s/OnBjbLzuipWz_u4QfmgcqQ)中,我们通过回溯搜索法,解决了n个数中求k个数的组合问题。
[回溯算法:求组合问题!](https://programmercarl.com/0077.组合.html)中,我们通过回溯搜索法,解决了n个数中求k个数的组合问题。

> 可以直接看我的B栈视频讲解:[带你学透回溯算法-组合问题的剪枝操作](https://www.bilibili.com/video/BV1wi4y157er)
文中的回溯法是可以剪枝优化的,本篇我们继续来看一下题目77. 组合。

链接:https://leetcode-cn.com/problems/combinations/

**看本篇之前,需要先看[回溯算法:求组合问题!](https://mp.weixin.qq.com/s/OnBjbLzuipWz_u4QfmgcqQ)**
**看本篇之前,需要先看[回溯算法:求组合问题!](https://programmercarl.com/0077.组合.html)**

大家先回忆一下[77. 组合]给出的回溯法的代码:

Expand Down
22 changes: 11 additions & 11 deletions problems/0078.子集.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## 第78题. 子集

题目地址:https://leetcode-cn.com/problems/subsets/
[力扣题目链接](https://leetcode-cn.com/problems/subsets/)

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

Expand All @@ -31,7 +31,7 @@

## 思路

求子集问题和[回溯算法:求组合问题!](https://mp.weixin.qq.com/s/OnBjbLzuipWz_u4QfmgcqQ)[回溯算法:分割问题!](https://mp.weixin.qq.com/s/Pb1epUTbU8fHIht-g_MS5Q)又不一样了。
求子集问题和[回溯算法:求组合问题!](https://programmercarl.com/0077.组合.html)[回溯算法:分割问题!](https://programmercarl.com/0131.分割回文串.html)又不一样了。

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,**那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!**

Expand Down Expand Up @@ -101,7 +101,7 @@ for (int i = startIndex; i < nums.size(); i++) {

## C++代码

根据[关于回溯算法,你该了解这些!](https://mp.weixin.qq.com/s/gjSgJbNbd1eAA5WkA-HeWw)给出的回溯算法模板:
根据[关于回溯算法,你该了解这些!](https://programmercarl.com/回溯算法理论基础.html)给出的回溯算法模板:

```
void backtracking(参数) {
Expand Down Expand Up @@ -157,15 +157,15 @@ public:
相信大家经过了
* 组合问题:
* [回溯算法:求组合问题!](https://mp.weixin.qq.com/s/OnBjbLzuipWz_u4QfmgcqQ)
* [回溯算法:组合问题再剪剪枝](https://mp.weixin.qq.com/s/Ri7spcJMUmph4c6XjPWXQA)
* [回溯算法:求组合总和!](https://mp.weixin.qq.com/s/HX7WW6ixbFZJASkRnCTC3w)
* [回溯算法:电话号码的字母组合](https://mp.weixin.qq.com/s/e2ua2cmkE_vpYjM3j6HY0A)
* [回溯算法:求组合总和(二)](https://mp.weixin.qq.com/s/FLg8G6EjVcxBjwCbzpACPw)
* [回溯算法:求组合总和(三)](https://mp.weixin.qq.com/s/_1zPYk70NvHsdY8UWVGXmQ)
* [回溯算法:求组合问题!](https://programmercarl.com/0077.组合.html)
* [回溯算法:组合问题再剪剪枝](https://programmercarl.com/0077.组合优化.html)
* [回溯算法:求组合总和!](https://programmercarl.com/0216.组合总和III.html)
* [回溯算法:电话号码的字母组合](https://programmercarl.com/0017.电话号码的字母组合.html)
* [回溯算法:求组合总和(二)](https://programmercarl.com/0039.组合总和.html)
* [回溯算法:求组合总和(三)](https://programmercarl.com/0040.组合总和II.html)
* 分割问题:
* [回溯算法:分割回文串](https://mp.weixin.qq.com/s/Pb1epUTbU8fHIht-g_MS5Q)
* [回溯算法:复原IP地址](https://mp.weixin.qq.com/s/v--VmA8tp9vs4bXCqHhBuA)
* [回溯算法:分割回文串](https://programmercarl.com/0131.分割回文串.html)
* [回溯算法:复原IP地址](https://programmercarl.com/0093.复原IP地址.html)
洗礼之后,发现子集问题还真的有点简单了,其实这就是一道标准的模板题。
Expand Down
Loading

0 comments on commit 0a8191b

Please sign in to comment.