Skip to content

Commit 9dccd1e

Browse files
committed
More solutions
1 parent 328b36a commit 9dccd1e

18 files changed

+564
-3
lines changed

Binary_Tree_Level_Order_Traversal_2.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,21 @@ class Solution {
1212
vector<vector<int>> levelOrderBottom(TreeNode *root) {
1313
if(root == nullptr) return vector<vector<int>>();
1414

15-
vector<vector<int>> result;
1615
queue<TreeNode *> p, q;
1716
p.push(root);
1817

18+
vector<vector<int>> result;
1919
vector<int> layer;
2020
TreeNode *t = nullptr;
21+
2122
while(!p.empty()){
2223
t = p.front();
23-
24+
p.pop();
2425
layer.push_back(t->val);
26+
2527
if(t->left) q.push(t->left);
2628
if(t->right) q.push(t->right);
2729

28-
p.pop();
2930
if(p.empty()){
3031
swap(p, q);
3132
result.insert(result.begin(), layer);

Binary_Tree_Postorder_Traversal.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<int> postorderTraversal(TreeNode *root) {
13+
// IMPORTANT: Please reset any member data you declared, as
14+
// the same Solution instance will be reused for each test case.
15+
if(root == nullptr) return {};
16+
17+
stack<TreeNode *> p, q;
18+
p.push(root);
19+
20+
TreeNode *t = nullptr;
21+
while(!p.empty()){
22+
t = p.top();
23+
p.pop();
24+
25+
if(t->left) p.push(t->left);
26+
if(t->right) p.push(t->right);
27+
q.push(t);
28+
}
29+
30+
vector<int> result;
31+
while(!q.empty()){
32+
t = q.top();
33+
q.pop();
34+
result.push_back(t->val);
35+
}
36+
37+
return result;
38+
}
39+
};
40+

Container_With_Most_Water.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution {
2+
public:
3+
int maxArea(vector<int> &height) {
4+
if(height.empty()) return 0;
5+
6+
int i = 0;
7+
int j = (int)height.size()-1;
8+
int max_area = min(height[i], height[j])*(j-i);
9+
10+
while(i < j){
11+
if(height[i] < height[j]){
12+
i = next_forward(height, i);
13+
if(i < 0) break;
14+
}else{
15+
j = next_backward(height, j);
16+
if(j < 0) break;
17+
}
18+
19+
int t = min(height[i], height[j])*(j-i);
20+
if(t > max_area){
21+
max_area = t;
22+
}
23+
}
24+
25+
return max_area;
26+
}
27+
28+
private:
29+
// (s, ---)
30+
int next_forward(vector<int> &A, int s){
31+
for(int i = s+1; i < A.size(); i++){
32+
if(A[i] > A[s]) return i;
33+
}
34+
35+
return -1;
36+
}
37+
38+
int next_backward(vector<int> &A, int e){
39+
for(int i = e-1; i >= 0; i--){
40+
if(A[i] > A[e]) return i;
41+
}
42+
43+
return -1;
44+
}
45+
46+
};

Generate_Parentheses.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
vector<string> generateParenthesis(int n) {
4+
if(n == 1) return {"()"};
5+
6+
vector<string> result;
7+
string sofar = "(";
8+
9+
parenthesis_helper(result, sofar, 1, 1, 0, 2*n);
10+
return result;
11+
}
12+
private:
13+
void parenthesis_helper(vector<string> &result, string sofar, int k, int l, int r, int m){
14+
if(k == m){
15+
result.push_back(sofar);
16+
return;
17+
}
18+
19+
if(r > l) return;
20+
21+
if(l < m/2) parenthesis_helper(result, sofar + "(", k+1, l+1, r, m);
22+
if(r < m/2) parenthesis_helper(result, sofar + ")", k+1, l, r+1, m);
23+
}
24+
};

Gray_Code.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> grayCode(int n) {
4+
if(n == 0) return {0};
5+
6+
vector<int> result = {0, 1};
7+
int k = 1;
8+
int add = 1;
9+
int t;
10+
11+
while(k < n){
12+
t = result.size();
13+
add *= 2;
14+
for(int i = t-1; i >= 0; i--){
15+
result.push_back(result[i]+add);
16+
}
17+
k++;
18+
}
19+
20+
return result;
21+
}
22+
};

Length_of_Last_Word.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int lengthOfLastWord(const char *s) {
4+
int cnt = 0;
5+
6+
while(*s){
7+
while(*s && *s == ' ') s++;
8+
9+
if(*s) cnt = 0;
10+
else return cnt;
11+
12+
while(*s && isalpha(*s)){
13+
s++;
14+
cnt++;
15+
}
16+
}
17+
18+
return cnt;
19+
}
20+
};

Maximum_Depth_of_Binary_Tree.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
int maxDepth(TreeNode *root) {
13+
if(root == nullptr) return 0;
14+
if(root->left == nullptr && root->right == nullptr) return 1;
15+
16+
return max(maxDepth(root->left), maxDepth(root->right))+1;
17+
}
18+
};
19+

Pascal_Triangle.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > generate(int numRows) {
4+
if(numRows <= 0) return vector<vector<int>>();
5+
6+
vector<vector<int>> result = {{1}};
7+
vector<int> layer;
8+
int k = 2;
9+
int t;
10+
11+
while(k <= numRows){
12+
layer.clear();
13+
for(int i = 0; i < k; i++){
14+
15+
if(i > 0) t = result[k-2][i-1];
16+
else t = 0;
17+
18+
if(i < k-1) t += result[k-2][i];
19+
else t += 0;
20+
layer.push_back(t);
21+
}
22+
result.push_back(layer);
23+
k++;
24+
}
25+
26+
return result;
27+
}
28+
};

Plus_One.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
vector<int> plusOne(vector<int> &digits) {
4+
int cbit = 1;
5+
vector<int> result(digits);
6+
7+
for(int i = digits.size()-1; i >= 0; i--){
8+
if(digits[i] == 9){
9+
if(cbit == 1){
10+
cbit = 1;
11+
result[i] = 0;
12+
}
13+
}else{
14+
if(cbit == 1){
15+
cbit = 0;
16+
result[i]++;
17+
}
18+
}
19+
}
20+
21+
if(cbit == 1) result.insert(result.begin(), 1);
22+
23+
return result;
24+
}
25+
};

Rotate_Image.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
public:
3+
void rotate(vector<vector<int> > &matrix) {
4+
if(matrix.empty()) return;
5+
6+
fold_dig(matrix);
7+
fold_horiz(matrix);
8+
9+
}
10+
11+
private:
12+
void fold_dig(vector<vector<int>> &M){
13+
int n = (int)M.size();
14+
15+
for(int i = 0; i < n; i++){
16+
for(int j = i+1; j < n; j++){
17+
swap(M[i][j], M[j][i]);
18+
}
19+
}
20+
}
21+
22+
void fold_horiz(vector<vector<int>> &M){
23+
int i = 0;
24+
int j = (int)M.size()-1;
25+
26+
while(i < j){
27+
swap_col(M, i, j);
28+
i++;
29+
j--;
30+
}
31+
}
32+
33+
void swap_col(vector<vector<int>> &M, int i, int j){
34+
for(int k = 0; k < M.size(); k++){
35+
swap(M[k][i], M[k][j]);
36+
}
37+
}
38+
39+
};

0 commit comments

Comments
 (0)