Skip to content

Commit 29ddea7

Browse files
committed
2025.02.19
1 parent f7bc40d commit 29ddea7

Some content is hidden

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

51 files changed

+804
-917
lines changed

cpp/100.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// recursion-3ms.cpp
21
/**
32
* Definition for a binary tree node.
43
* struct TreeNode {

cpp/101.cpp

+22-22
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@
1010
*/
1111
class Solution {
1212
public:
13-
bool isSymmetric(TreeNode *root) {
14-
if (root == NULL)
15-
return 1;
16-
queue<TreeNode *> qe1, qe2;
17-
qe1.push(root->left);
18-
qe2.push(root->right);
19-
while (!qe1.empty() && !qe2.empty()) {
20-
TreeNode *r1 = qe1.front();
21-
TreeNode *r2 = qe2.front();
22-
qe1.pop();
23-
qe2.pop();
24-
if (r1 && r2) {
25-
if (r1->val != r2->val)
26-
return 0;
27-
qe1.push(r1->left);
28-
qe1.push(r1->right);
29-
qe2.push(r2->right);
30-
qe2.push(r2->left);
31-
} else if (r1 != r2)
32-
return 0;
13+
bool isSymmetric(TreeNode* root) {
14+
if (root == NULL)
15+
return 1;
16+
queue<TreeNode*> qe1, qe2;
17+
qe1.push(root->left);
18+
qe2.push(root->right);
19+
while (!qe1.empty() && !qe2.empty()) {
20+
TreeNode* r1 = qe1.front();
21+
TreeNode* r2 = qe2.front();
22+
qe1.pop();
23+
qe2.pop();
24+
if (r1 && r2) {
25+
if (r1->val != r2->val)
26+
return 0;
27+
qe1.push(r1->left);
28+
qe1.push(r1->right);
29+
qe2.push(r2->right);
30+
qe2.push(r2->left);
31+
} else if (r1 != r2)
32+
return 0;
33+
}
34+
return 1;
3335
}
34-
return 1;
35-
}
3636
};

cpp/102.cpp

+15-14
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@
99
* };
1010
*/
1111
class Solution {
12-
void preOrder(int i, TreeNode *root, vector<vector<int>> &nums) {
13-
if (root == nullptr)
14-
return;
15-
if (nums.size() == i)
16-
nums.push_back({});
17-
nums[i].push_back(root->val);
18-
preOrder(i + 1, root->left, nums);
19-
preOrder(i + 1, root->right, nums);
20-
}
12+
void preOrder(int i, TreeNode* root, vector<vector<int>>& nums) {
13+
if (root == nullptr)
14+
return;
15+
if (nums.size() == i)
16+
nums.push_back({});
17+
nums[i].push_back(root->val);
18+
preOrder(i + 1, root->left, nums);
19+
preOrder(i + 1, root->right, nums);
20+
}
21+
2122
public:
22-
vector<vector<int>> levelOrder(TreeNode *root) {
23-
vector<vector<int>> result;
24-
preOrder(0, root, result);
25-
return result;
26-
}
23+
vector<vector<int>> levelOrder(TreeNode* root) {
24+
vector<vector<int>> result;
25+
preOrder(0, root, result);
26+
return result;
27+
}
2728
};

cpp/1047.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Solution { // 344ms recursion
1212
return i == -1 ? S : removeDuplicates(S.substr(0, i) + S.substr(j));
1313
}
1414
};
15-
class Solution { // 24ms iteration
15+
class Solution2 { // 24ms iteration
1616
public:
1717
string removeDuplicates(string S) {
1818
stack<int> st;

cpp/37.cpp

+54-53
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,62 @@
11
// hashset+preprocess+dfs+3ms.cpp
22
class Solution {
3-
bool valid(int i, int j, char val, vector<vector<char>> &board) {
4-
for (int k = 0; k < 9; ++k)
5-
if (board[k][j] == val || board[i][k] == val)
6-
return false;
7-
int x = i / 3 * 3;
8-
int y = j / 3 * 3;
9-
for (i = x; i < x + 3; ++i)
10-
for (j = y; j < y + 3; ++j)
11-
if (board[i][j] == val)
12-
return false;
13-
return true;
14-
}
15-
void init(vector<vector<char>> &board, unordered_set<char> hashset[][9]) {
16-
for (int i = 0; i < 9; ++i)
17-
for (int j = 0; j < 9; ++j)
18-
if (board[i][j] != '.') {
19-
char ch = board[i][j];
20-
for (int k = 0; k < 9; ++k) {
21-
hashset[k][j].erase(ch);
22-
hashset[i][k].erase(ch);
23-
}
24-
int x = i / 3 * 3;
25-
int y = j / 3 * 3;
26-
for (int a = x; a < x + 3; ++a)
27-
for (int b = y; b < y + 3; ++b)
28-
hashset[a][b].erase(ch);
29-
}
30-
}
31-
bool dfs(int i, int j, vector<vector<char>> &board,
32-
unordered_set<char> hashset[][9]) {
33-
if (j == 9) {
34-
return i == 8 ? true : dfs(i + 1, 0, board, hashset);
3+
bool valid(int i, int j, char val, vector<vector<char>>& board) {
4+
for (int k = 0; k < 9; ++k)
5+
if (board[k][j] == val || board[i][k] == val)
6+
return false;
7+
int x = i / 3 * 3;
8+
int y = j / 3 * 3;
9+
for (i = x; i < x + 3; ++i)
10+
for (j = y; j < y + 3; ++j)
11+
if (board[i][j] == val)
12+
return false;
13+
return true;
14+
}
15+
void init(vector<vector<char>>& board, unordered_set<char> hashset[][9]) {
16+
for (int i = 0; i < 9; ++i)
17+
for (int j = 0; j < 9; ++j)
18+
if (board[i][j] != '.') {
19+
char ch = board[i][j];
20+
for (int k = 0; k < 9; ++k) {
21+
hashset[k][j].erase(ch);
22+
hashset[i][k].erase(ch);
23+
}
24+
int x = i / 3 * 3;
25+
int y = j / 3 * 3;
26+
for (int a = x; a < x + 3; ++a)
27+
for (int b = y; b < y + 3; ++b)
28+
hashset[a][b].erase(ch);
29+
}
3530
}
36-
if (hashset[i][j].size() == 0)
37-
return dfs(i, j + 1, board, hashset);
38-
else {
39-
for (auto it = hashset[i][j].begin(); it != hashset[i][j].end(); ++it) {
40-
if (valid(i, j, *it, board)) {
41-
board[i][j] = *it;
42-
if (dfs(i, j + 1, board, hashset))
43-
return true;
44-
board[i][j] = 0;
31+
bool dfs(int i, int j, vector<vector<char>>& board,
32+
unordered_set<char> hashset[][9]) {
33+
if (j == 9) {
34+
return i == 8 ? true : dfs(i + 1, 0, board, hashset);
35+
}
36+
if (hashset[i][j].size() == 0)
37+
return dfs(i, j + 1, board, hashset);
38+
else {
39+
for (auto ch : hashset[i][j]) {
40+
if (valid(i, j, ch, board)) {
41+
board[i][j] = ch;
42+
if (dfs(i, j + 1, board, hashset))
43+
return true;
44+
board[i][j] = '.';
45+
}
46+
}
47+
return false;
4548
}
46-
}
47-
return false;
4849
}
49-
}
5050

5151
public:
52-
void solveSudoku(vector<vector<char>> &board) {
53-
unordered_set<char> hashset[9][9];
54-
for (int i = 0; i < 9; ++i)
55-
for (int j = 0; j < 9; ++j)
56-
if (board[i][j] == '.')
57-
hashset[i][j] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
58-
init(board, hashset);
59-
dfs(0, 0, board, hashset);
60-
}
52+
void solveSudoku(vector<vector<char>>& board) {
53+
unordered_set<char> hashset[9][9];
54+
for (int i = 0; i < 9; ++i)
55+
for (int j = 0; j < 9; ++j)
56+
if (board[i][j] == '.')
57+
hashset[i][j] = {'1', '2', '3', '4', '5',
58+
'6', '7', '8', '9'};
59+
init(board, hashset);
60+
dfs(0, 0, board, hashset);
61+
}
6162
};

cpp/38.cpp

+19-19
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
class Solution { // 4ms
1+
class Solution {
22
public:
3-
string countAndSay(int n) {
4-
auto next = [](const string &s) {
5-
int i = 0, j = 1, n = s.size();
6-
string ss;
7-
for (; j < n; ++j) {
8-
if (s[i] != s[j]) {
9-
ss += to_string(j - i) + s[i];
10-
i = j;
11-
}
12-
}
13-
ss += to_string(j - i) + s[i];
14-
return ss;
15-
};
16-
string s = "1";
17-
for (int i = 1; i < n; ++i)
18-
s = next(s);
19-
return s;
20-
}
3+
string countAndSay(int n) {
4+
auto next = [](const string& s) {
5+
int i = 0, j = 1, n = s.size();
6+
string ss;
7+
for (; j < n; ++j) {
8+
if (s[i] != s[j]) {
9+
ss += to_string(j - i) + s[i];
10+
i = j;
11+
}
12+
}
13+
ss += to_string(j - i) + s[i];
14+
return ss;
15+
};
16+
string s = "1";
17+
for (int i = 1; i < n; ++i)
18+
s = next(s);
19+
return s;
20+
}
2121
};

cpp/39.cpp

+16-42
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,22 @@
1-
// dfs.cpp
21
class Solution {
3-
int target;
4-
vector<vector<int>> res;
5-
6-
public:
7-
vector<vector<int>> combinationSum(vector<int> &candidates, int target) {
8-
this->target = target;
9-
vector<int> cur;
10-
dfs(candidates, cur, 0, 0);
11-
return res;
12-
}
13-
void dfs(vector<int> &nums, vector<int> &cur, int i, int sum) {
14-
if (sum == target) {
15-
res.push_back(cur);
16-
return;
2+
vector<vector<int>> res;
3+
void dfs(vector<int>& nums, vector<int>& cur, int i, int sum) {
4+
if (0 == sum) {
5+
res.push_back(cur);
6+
return;
7+
}
8+
for (; i < nums.size() && sum >= nums[i]; ++i) {
9+
cur.push_back(nums[i]);
10+
dfs(nums, cur, i, sum - nums[i]);
11+
cur.pop_back();
12+
}
1713
}
18-
if (i == nums.size() || sum > target)
19-
return;
20-
cur.push_back(nums[i]);
21-
dfs(nums, cur, i, sum + nums[i]);
22-
cur.pop_back();
23-
dfs(nums, cur, i + 1, sum);
24-
}
25-
};
26-
// sort_dfs.cpp
27-
class Solution {
28-
vector<vector<int>> res;
2914

3015
public:
31-
vector<vector<int>> combinationSum(vector<int> &candidates, int target) {
32-
sort(candidates.begin(), candidates.end());
33-
vector<int> cur;
34-
dfs(candidates, cur, 0, target);
35-
return res;
36-
}
37-
void dfs(vector<int> &nums, vector<int> &cur, int i, int sum) {
38-
if (0 == sum) {
39-
res.push_back(cur);
40-
return;
41-
}
42-
for (; i < nums.size() && sum >= nums[i]; ++i) {
43-
cur.push_back(nums[i]);
44-
dfs(nums, cur, i, sum - nums[i]);
45-
cur.pop_back();
16+
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
17+
ranges::sort(candidates);
18+
vector<int> cur;
19+
dfs(candidates, cur, 0, target);
20+
return res;
4621
}
47-
}
4822
};

cpp/40.cpp

+19-20
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
// sort_dfs.cpp
21
class Solution {
3-
vector<vector<int>> res;
2+
vector<vector<int>> res;
3+
void dfs(vector<int>& nums, vector<int>& cur, int i, int sum) {
4+
if (0 == sum) {
5+
res.push_back(cur);
6+
return;
7+
}
8+
for (int start = i; i < nums.size() && sum >= nums[i]; ++i) {
9+
if (i > start && nums[i] == nums[i - 1])
10+
continue;
11+
cur.push_back(nums[i]);
12+
dfs(nums, cur, i + 1, sum - nums[i]);
13+
cur.pop_back();
14+
}
15+
}
416

517
public:
6-
vector<vector<int>> combinationSum2(vector<int> &candidates, int target) {
7-
sort(candidates.begin(), candidates.end());
8-
vector<int> cur;
9-
dfs(candidates, cur, 0, target);
10-
return res;
11-
}
12-
void dfs(vector<int> &nums, vector<int> &cur, int i, int sum) {
13-
if (0 == sum) {
14-
res.push_back(cur);
15-
return;
16-
}
17-
for (int start = i; i < nums.size() && sum >= nums[i]; ++i) {
18-
if (i > start && nums[i] == nums[i - 1])
19-
continue;
20-
cur.push_back(nums[i]);
21-
dfs(nums, cur, i + 1, sum - nums[i]);
22-
cur.pop_back();
18+
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
19+
ranges::sort(candidates);
20+
vector<int> cur;
21+
dfs(candidates, cur, 0, target);
22+
return res;
2323
}
24-
}
2524
};

cpp/41.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// O1Space.cpp
22
class Solution {
33
public:
4-
int firstMissingPositive(vector<int> &nums) {
5-
int n = nums.size();
6-
for (int i = 0; i < n; ++i)
7-
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1])
8-
swap(nums[i], nums[nums[i] - 1]);
9-
for (int i = 0; i < n; ++i)
10-
if (nums[i] != i + 1)
11-
return i + 1;
12-
return n + 1;
13-
}
4+
int firstMissingPositive(vector<int>& nums) {
5+
int n = nums.size();
6+
for (int i = 0; i < n; ++i)
7+
while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1])
8+
swap(nums[i], nums[nums[i] - 1]);
9+
for (int i = 0; i < n; ++i)
10+
if (nums[i] != i + 1)
11+
return i + 1;
12+
return n + 1;
13+
}
1414
};

0 commit comments

Comments
 (0)