Skip to content

Commit 45fd500

Browse files
committed
update from laptop0520
1 parent 628687e commit 45fd500

12 files changed

+273
-8
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"configurations": [
77

88
{
9-
"name": "gcc.exe - 生成和调试活动文件",
9+
"name": "gcc.exe - debug",
1010
"type": "cppdbg",
1111
"request": "launch",
1212
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",

.vscode/tasks.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
"kind": "build",
2222
"isDefault": true
2323
},
24-
"detail": "调试器生成的任务。"
24+
"detail": "调试器生成的任务。",
25+
//从这里开始是自己添加的
26+
"presentation": {
27+
"panel": "new" //默认为“shared“表示共享,改成new之后每个进程创建新的端口
28+
}//添加这一整块代码块
2529
}
2630
],
2731
"version": "2.0.0"

totalProblem(CN)/216.组合总和-iii.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ class Solution
1414
// 9个数选择k个数,让它们的和为n
1515
void DFS(int cur, int n,int k, int sum)
1616
{
17+
//当前选择的数 加上 剩余的个数也到不了k
18+
//那么肯定全部加上也不够k个,直接剪枝
1719
if(temp.size()+(n-cur+1)<k || temp.size()>k)
1820
return;
21+
//保存条件: tmp存了k个数 并且加起来要等于n的情况
1922
if(temp.size() == k && accumulate(temp.begin(),temp.end(),0) == sum)
2023
{
2124
ans.emplace_back(temp);
2225
return;
2326
}
27+
//每个数,选或不选
2428
temp.emplace_back(cur);
2529
DFS(cur+1, n,k,sum);
2630
temp.pop_back();

totalProblem(CN)/34.在排序数组中查找元素的第一个和最后一个位置.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
// @lc code=start
88
//[34] 在排序数组中查找元素的第一个和最后一个位置
99
// 92.64 % 16.44 %
10+
# include<bits/stdc++.h>
11+
using namespace std;
1012
class Solution
1113
{
1214
public:
@@ -131,7 +133,7 @@ class Solution2
131133
int main()
132134
{
133135
Solution2 A;
134-
vector<int> nums{2, 2};
136+
vector<int> nums{2, 2, 3};
135137
int target = 3;
136138
vector<int> res;
137139
res = A.searchRange(nums, target);

totalProblem(CN)/39.组合总和.cpp

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ class Solution
2121
res.emplace_back(combine);
2222
return;
2323
}
24-
// 选择不用,直接跳过
24+
// 选择不用,直接跳过
25+
// 不选,也要有一个尽头
2526
DFS(candidates, target, res, combine, idx + 1);
26-
// 选择当前数
27+
// 选择当前数, 并且idx不会往下更新
2728
if (target - candidates[idx] >= 0)
2829
{
2930
combine.emplace_back(candidates[idx]);
@@ -41,4 +42,37 @@ class Solution
4142
}
4243
};
4344
// @lc code=end
45+
// 二刷
46+
class Solution {
47+
public:
4448

49+
void dfs(vector<vector<int>>&ans , vector<int>& tmp, vector<int>& candidates, int target, int idx)
50+
{
51+
if(idx == candidates.size())
52+
return;
53+
if(target == 0)
54+
{
55+
ans.emplace_back(tmp);
56+
return;
57+
}
58+
// 要注意的是这里要加1
59+
dfs(ans, tmp, candidates,target,idx+1);
60+
// 这一句判断,很重要!!
61+
if(target-candidates[idx]>=0)
62+
{
63+
tmp.emplace_back(candidates[idx]);
64+
dfs(ans, tmp, candidates,target-candidates[idx],idx);
65+
tmp.pop_back();
66+
}
67+
return;
68+
}
69+
70+
71+
vector<vector<int>> combinationSum(vector<int>& candidates, int target)
72+
{
73+
vector<vector<int>> ans;
74+
vector<int> tmp;
75+
dfs(ans, tmp, candidates, target, 0);
76+
return ans;
77+
}
78+
};

totalProblem(CN)/40.组合总和-ii.cpp

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,69 @@
55
*/
66

77
// @lc code=start
8-
class Solution {
8+
class Solution
9+
{
910
public:
10-
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
11-
11+
void dfs(vector<vector<int>> &ans, vector<int> &tmp, vector<int> &candidates, int target, int idx)
12+
{
13+
if (target == 0)
14+
{
15+
ans.emplace_back(tmp);
16+
return;
17+
}
18+
for (int i = idx; i < candidates.size() && target - candidates[i] >= 0; i++)
19+
{
20+
if (i > idx && candidates[i] == candidates[i - 1])
21+
continue;
22+
tmp.emplace_back(candidates[i]);
23+
dfs(ans, tmp, candidates, target - candidates[i], i + 1);
24+
tmp.pop_back();
25+
}
26+
}
27+
vector<vector<int>> combinationSum2(vector<int> &candidates, int target)
28+
{
29+
vector<vector<int>> ans;
30+
vector<int> tmp;
31+
sort(candidates.begin(), candidates.end());
32+
dfs(ans, tmp, candidates, target, 0);
33+
return ans;
1234
}
1335
};
1436
// @lc code=end
1537

38+
// 以下的解法是没办法正确的
39+
class Solution
40+
{
41+
public:
42+
void dfs(vector<vector<int>> &ans, vector<int> &tmp, vector<int> &candidates, int target, int idx)
43+
{
44+
if (idx == candidates.size())
45+
return;
46+
if (target == 0)
47+
{
48+
ans.emplace_back(tmp);
49+
return;
50+
}
51+
dfs(ans, tmp, candidates, target, idx + 1);
52+
//为什么呢? 因为没办法确定前面是否选择了candidate[idx]
53+
// 这样实际上就会导致漏掉一些结果!!
54+
if (target - candidates[idx] >= 0 && candidates[idx] != candidates[idx + 1])
55+
{
56+
tmp.emplace_back(candidates[idx]);
57+
dfs(ans, tmp, candidates, target - candidates[idx], idx + 1);
58+
tmp.pop_back();
59+
}
60+
return;
61+
}
62+
vector<vector<int>> combinationSum2(vector<int> &candidates, int target)
63+
{
64+
vector<vector<int>> ans;
65+
vector<int> tmp;
66+
sort(candidates.begin(), candidates.end());
67+
dfs(ans, tmp, candidates, target, 0);
68+
return ans;
69+
}
70+
};
71+
72+
// 在示例里 第一个组合不会出现([ 1, 1, 6 ])
73+
// [[ 1, 1, 6 ], [ 1, 2, 5 ], [ 1, 7 ], [ 2, 6 ] ]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* @lc app=leetcode.cn id=509 lang=cpp
3+
*
4+
* [509] 斐波那契数
5+
*/
6+
7+
// @lc code=start
8+
// 100 % 23.5 %
9+
class Solution
10+
{
11+
public:
12+
int fib(int n)
13+
{
14+
vector<int> dp(n+1,0);
15+
dp[0] = 0;
16+
if(n == 0)
17+
return dp[0];
18+
dp[1] = 1;
19+
if(n == 1)
20+
return dp[1];
21+
for(int i=2;i<=n;i++)
22+
{
23+
dp[i] = dp[i-1] + dp[i-2];
24+
}
25+
return dp[n];
26+
}
27+
};
28+
// @lc code=end
29+

totalProblem(CN)/62.不同路径.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,28 @@ class Solution
2828
}
2929
};
3030
// @lc code=end
31+
// 二刷
32+
class Solution
33+
{
34+
public:
35+
int uniquePaths(int m, int n)
36+
{
37+
vector<vector<int>> dp(m,vector<int>(n,0));
38+
for(int i =0;i<m;i++)
39+
{
40+
dp[i][0] =1;
41+
}
42+
for(int j=0;j<n;j++)
43+
{
44+
dp[0][j] = 1;
45+
}
46+
for(int i=1;i<m;i++)
47+
{
48+
for(int j=1;j<n;j++)
49+
{
50+
dp[i][j] = dp[i-1][j] +dp[i][j-1];
51+
}
52+
}
53+
return dp[m-1][n-1];
54+
}
55+
};
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* @lc app=leetcode.cn id=63 lang=cpp
3+
*
4+
* [63] 不同路径 II
5+
*/
6+
7+
// @lc code=start
8+
9+
class Solution
10+
{
11+
public:
12+
int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid)
13+
{
14+
int m = obstacleGrid.size();
15+
int n = obstacleGrid[0].size();
16+
// 如果在起点或终点出现了障碍,直接返回0
17+
if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1)
18+
return 0;
19+
vector<vector<int>> dp(m, vector<int>(n, 0));
20+
// 这里注意也需要加上判断条件
21+
for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++)
22+
dp[i][0] = 1;
23+
for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++)
24+
dp[0][j] = 1;
25+
for (int i = 1; i < m; i++)
26+
{
27+
for (int j = 1; j < n; j++)
28+
{
29+
if (obstacleGrid[i][j] == 1)
30+
continue;
31+
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
32+
}
33+
}
34+
return dp[m - 1][n - 1];
35+
}
36+
};
37+
// @lc code=end

0 commit comments

Comments
 (0)