Skip to content

Commit 21725f3

Browse files
committed
1
1 parent da95d89 commit 21725f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1216
-871
lines changed

notes/src/SUMMARY.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,42 @@
8989
- [216. 组合总和 III](./day25/lc216.md)
9090
- [17. 电话号码的字母组合](./day25/lc17.md)
9191
- [day 27](./day27.md)
92+
- [39. 组合总和](./day27/lc39.md)
93+
- [40. 组合总和II](./day27/lc40.md)
94+
- [131. 分割回文串](./day27/lc131.md)
95+
- [day 28](./day28.md)
96+
- [93.复原IP地址](./day28/lc93.md)
97+
- [78.子集](./day28/lc78.md)
98+
- [90.子集II](./day28/lc90.md)
99+
- [day 29](./day29.md)
100+
- [491.递增子序列](./day29/lc491.md)
101+
- [46.全排列](./day29/lc46.md)
102+
- [47.全排列 II](./day29/lc47.md)
103+
- [day 30](./day30.md)
104+
- [332.重新安排行程](./day30/332.md)
105+
- [51. N皇后](./day30/lc51.md)
106+
- [37. 解数独](./day30/lc37.md)
107+
- [day 31](./day31.md)
108+
- [455.分发饼干](./day31/lc455.md)
109+
- [376. 摆动序列](./day31/lc376.md)
110+
- [53. 最大子序和](./day31/lc53.md)
111+
- [day 32](./day32.md)
112+
- [122.买卖股票的最佳时机II](./day32/lc122.md)
113+
- [55. 跳跃游戏](./day32/lc55.md)
114+
- [45.跳跃游戏II](./day32/lc45.md)
115+
- [day 34](./day34.md)
116+
- [1005.K次取反后最大化的数组和](./day34/lc1005.md)
117+
- [134. 加油站](./day34/lc134.md)
118+
- [135. 分发糖果](./day34/lc135.md)
119+
- [day 35](./day35.md)
120+
- [860.柠檬水找零](./day35/lc860.md)
121+
- [406.根据身高重建队列](./day35/lc406.md)
122+
- [452. 用最少数量的箭引爆气球](./day35/lc452.md)
123+
- [day 36](./day36.md)
124+
- [435. 无重叠区间](./day36/lc435.md)
125+
- [763.划分字母区间](./day36/lc763.md)
126+
- [56. 合并区间](./day36/lc56.md)
127+
- [day 37](./day37.md)
128+
- [738.单调递增的数字](./day37/lc738.md)
129+
- [968.监控二叉树](./day37/lc968.md)
92130
- [remains](./remains.md)

notes/src/day27.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 第七章 回溯算法part03
2+
3+
详细布置
4+
5+
## 39. 组合总和
6+
7+
本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制
8+
9+
题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html
10+
视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ
11+
12+
## 40.组合总和II
13+
14+
本题开始涉及到一个问题了:去重。
15+
16+
注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。
17+
18+
题目链接/文章讲解:https://programmercarl.com/0040.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CII.html
19+
视频讲解:https://www.bilibili.com/video/BV12V4y1V73A
20+
21+
## 131.分割回文串
22+
23+
本题较难,大家先看视频来理解 分割问题,明天还会有一道分割问题,先打打基础。
24+
25+
https://programmercarl.com/0131.%E5%88%86%E5%89%B2%E5%9B%9E%E6%96%87%E4%B8%B2.html
26+
视频讲解:https://www.bilibili.com/video/BV1c54y1e7k6
27+
28+
29+

notes/src/day27/lc131.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# 131.分割回文串
2+
3+
```cpp
4+
class Solution {
5+
public:
6+
string s;vector<vector<string>>res;vector<string>cur;
7+
bool valid(int l,int r){
8+
int lptr=l,rptr=r;while(lptr<=r){if(s[lptr]!=s[rptr])return false;lptr++;rptr--;}return true;
9+
}
10+
void bt(int start){
11+
if(start==s.size()){res.push_back(cur);return;}
12+
for(int i=start;i<s.size();i++){
13+
if(valid(start,i)){
14+
cur.push_back(s.substr(start,i-start+1));
15+
bt(i+1);
16+
cur.pop_back();
17+
}
18+
}
19+
}
20+
vector<vector<string>> partition(string s) {
21+
this->s=s;bt(0);return res;
22+
}
23+
};
24+
```

notes/src/day27/lc39.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# 39. 组合总和
2+
3+
```cpp
4+
class Solution {
5+
public:
6+
vector<vector<int>>res;
7+
vector<int>cur;vector<int>candidates;
8+
int s=0,t;
9+
void bt(int start){
10+
if(s>=t){if(s==t)res.push_back(cur);return;}
11+
for(int j=start;j<candidates.size();j++){int i=candidates[j];
12+
cur.push_back(i);s+=i;
13+
bt(j);
14+
cur.pop_back();s-=i;
15+
}
16+
}
17+
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
18+
t=target;this->candidates=candidates;bt(0);return res;
19+
}
20+
};
21+
```

notes/src/day27/lc40.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# 40.组合总和II
2+
3+
```cpp
4+
class Solution {
5+
public:
6+
vector<vector<int>>res;
7+
vector<int>cur;vector<int>candidates;
8+
int s=0,t;
9+
void bt(int start){
10+
if(s>=t){if(s==t)res.push_back(cur);return;}
11+
for(int j=start;j<candidates.size();j++){
12+
int i=candidates[j];
13+
14+
if(j>start&&candidates[j]==candidates[j-1])continue;
15+
cur.push_back(i);s+=i;
16+
bt(j+1);
17+
cur.pop_back();s-=i;
18+
}
19+
}
20+
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
21+
t=target;sort(candidates.begin(),candidates.end());this->candidates=candidates;bt(0);return res;
22+
}
23+
};
24+
```
25+
26+
`if(j>start&&candidates[j]==candidates[j-1])continue;`这而想了很久,一直以为是j大于0
27+
28+
为了结果不重复,所以剪枝是必须要进行的操作

notes/src/day28.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# 28 第七章 回溯算法
2+
● 93.复原IP地址
3+
● 78.子集
4+
● 90.子集II
5+
6+
详细布置
7+
8+
## 93.复原IP地址
9+
10+
本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了
11+
12+
题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html
13+
视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/
14+
15+
## 78.子集
16+
17+
子集问题,就是收集树形结构中,每一个节点的结果。 整体代码其实和 回溯模板都是差不多的。
18+
19+
题目链接/文章讲解:https://programmercarl.com/0078.%E5%AD%90%E9%9B%86.html
20+
视频讲解:https://www.bilibili.com/video/BV1U84y1q7Ci
21+
## 90.子集II
22+
23+
大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。
24+
25+
题目链接/文章讲解:https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html
26+
视频讲解:https://www.bilibili.com/video/BV1vm4y1F71J

notes/src/day28/lc78.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
3+
4+
# 78.子集
5+
6+
```cpp
7+
class Solution {
8+
public:vector<vector<int>>res;vector<int>cur;vector<int>v;void bt(int start){res.push_back(cur);
9+
if(start>=v.size())return;for(int i=start;i<v.size();i++){
10+
cur.push_back(v[i]);bt(i+1);cur.pop_back();
11+
}
12+
}
13+
vector<vector<int>> subsets(vector<int>& nums) {
14+
v=nums;bt(0);return res;
15+
}
16+
};
17+
```
18+
19+
如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么**组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点**!

notes/src/day28/lc90.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# 90.子集II
3+
4+
```cpp
5+
class Solution {
6+
public:vector<vector<int>>res;vector<int>cur;vector<int>v;void bt(int start){res.push_back(cur);
7+
if(start==v.size())return;for(int i=start;i<v.size();i++){
8+
if(i>start&&v[i]==v[i-1])continue;
9+
cur.push_back(v[i]);bt(i+1);cur.pop_back();
10+
}
11+
}
12+
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
13+
sort(nums.begin(),nums.end());v=nums;bt(0);return res;
14+
}
15+
};
16+
```

notes/src/day28/lc93.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
# 93.复原IP地址
3+
4+
```cpp
5+
class Solution {
6+
public:
7+
vector<string>res;string cur;string s;void bt(int start,int cnt){
8+
if(cnt==4||start>=s.size()){if(cnt==4&&start==s.size())res.push_back(string(cur.begin(),cur.end()-1));return;}
9+
for(int i=1;i<=3;i++){
10+
string sub=string(s.begin()+start,s.begin()+start+i);
11+
if(valid(sub)){
12+
auto l=cur.size();
13+
cur+=sub+".";
14+
bt(start+i,cnt+1);
15+
cur.erase(l);
16+
}
17+
}
18+
}
19+
bool valid(string s){
20+
if(s.size()==0)return false;
21+
if(s[0]=='0')return s.size()==1;
22+
int a=stoi(s);return a>=0 && a<=255;
23+
}
24+
vector<string> restoreIpAddresses(string s) {this->s=s;
25+
bt(0,0);return res;
26+
}
27+
};
28+
```

notes/src/day29.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# 第七章 回溯算法part05
2+
3+
* 491.递增子序列
4+
* 46.全排列
5+
* 47.全排列 II
6+
7+
详细布置
8+
9+
## 491.递增子序列
10+
11+
本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。
12+
https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html
13+
14+
视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v
15+
16+
17+
## 46.全排列
18+
本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用 startIndex
19+
https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html
20+
视频讲解:https://www.bilibili.com/video/BV19v4y1S79W
21+
22+
## 47.全排列 II
23+
本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。 used[i - 1] == true 也行,used[i - 1] == false 也行
24+
25+
https://programmercarl.com/0047.%E5%85%A8%E6%8E%92%E5%88%97II.html
26+
27+
视频讲解:https://www.bilibili.com/video/BV1R84y1i7Tm

0 commit comments

Comments
 (0)