Skip to content

Commit 033ac55

Browse files
committed
leetcode 12/31/2013
1 parent 5717170 commit 033ac55

8 files changed

Lines changed: 247 additions & 0 deletions

LeetCode/connect.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Definition for binary tree with next pointer.
3+
* struct TreeLinkNode {
4+
* int val;
5+
* TreeLinkNode *left, *right, *next;
6+
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
void connect(TreeLinkNode *root) {
12+
if (root == NULL) return;
13+
TreeLinkNode *pt1 = root->left;
14+
TreeLinkNode *pt2 = root->right;
15+
while (pt1 != NULL) {
16+
pt1->next = pt2;
17+
pt1 = pt1->right;
18+
pt2 = pt2->left;
19+
}
20+
connect(root->left);
21+
connect(root->right);
22+
}
23+
};

LeetCode/fullJustify.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#define REP(i,n) for(int i=0;i<(n);++i)
2+
3+
class Solution {
4+
public:
5+
string doit(vector<string>& mm, int L, bool last) {
6+
string res = "";
7+
int m = mm.size();
8+
int len = 0;
9+
REP(i,mm.size()) len += mm[i].length();
10+
11+
if (m == 1 || last) {
12+
REP(i,mm.size()) res += mm[i];
13+
REP(i,L-len) res += " ";
14+
return res;
15+
}
16+
17+
int left = L - len;
18+
int avg = left / (m - 1);
19+
int sz = left - avg * (m - 1);
20+
string sps = "";
21+
REP(i,avg) sps += " ";
22+
23+
REP(i,mm.size()) {
24+
if (i > 0) {
25+
res += sps;
26+
if (i <= sz) res += " ";
27+
}
28+
res += mm[i];
29+
}
30+
return res;
31+
}
32+
33+
vector<string> fullJustify(vector<string> &words, int L) {
34+
int n = words.size();
35+
int idx = 0;
36+
vector<string> ret;
37+
while (idx < n) {
38+
vector<string> mm;
39+
int len = words[idx].length();
40+
mm.push_back(words[idx++]);
41+
while (idx < n) {
42+
if (len + 1 + words[idx].length() <= L) {
43+
len += 1 + words[idx].length();
44+
mm.push_back(" " + words[idx++]);
45+
} else {
46+
break;
47+
}
48+
}
49+
bool last = (idx == n);
50+
ret.push_back(doit(mm, L, last));
51+
}
52+
return ret;
53+
}
54+
};

LeetCode/inorderTraversal.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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> inorderTraversal(TreeNode *root) {
13+
vector<int> ret;
14+
if (root == NULL) return ret;
15+
vector<int> lt = inorderTraversal(root->left);
16+
vector<int> rt = inorderTraversal(root->right);
17+
for (int i = 0; i < lt.size(); ++i) ret.push_back(lt[i]);
18+
ret.push_back(root->val);
19+
for (int i = 0; i < rt.size(); ++i) ret.push_back(rt[i]);
20+
return ret;
21+
}
22+
};

LeetCode/isBalanced.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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 doit(TreeNode *root) {
13+
if (root == NULL) return 0;
14+
int h1 = doit(root->left);
15+
int h2 = doit(root->right);
16+
if (h1 == -1 || h2 == -1) return -1;
17+
if (abs(h1 - h2) > 1) return -1;
18+
return max(h1, h2) + 1;
19+
}
20+
21+
bool isBalanced(TreeNode *root) {
22+
if (root == NULL) return true;
23+
int h1 = doit(root->left);
24+
int h2 = doit(root->right);
25+
if (h1 == -1 || h2 == -1 || abs(h1 - h2) > 1) return false;
26+
return true;
27+
}
28+
};

LeetCode/isSymmetric.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
bool isok(TreeNode *lt, TreeNode *rt) {
13+
if (lt == NULL && rt == NULL) return true;
14+
if (lt == NULL && rt != NULL) return false;
15+
if (lt != NULL && rt == NULL) return false;
16+
if (lt->val != rt->val) return false;
17+
return isok(lt->left, rt->right) && isok(lt->right, rt->left);
18+
}
19+
20+
bool isSymmetric(TreeNode *root) {
21+
if (root == NULL) return true;
22+
return isok(root->left, root->right);
23+
}
24+
};

LeetCode/mergeTwoLists.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
12+
if (l1 == NULL) return l2;
13+
if (l2 == NULL) return l1;
14+
15+
ListNode *ret, *res;
16+
if (l1->val < l2->val) {
17+
ret = l1;
18+
l1 = l1->next;
19+
res = ret;
20+
} else {
21+
ret = l2;
22+
l2 = l2->next;
23+
res = ret;
24+
}
25+
26+
while (true) {
27+
if (l1 == NULL) {
28+
ret->next = l2;
29+
break;
30+
} else if (l2 == NULL) {
31+
ret->next = l1;
32+
break;
33+
}
34+
35+
if (l1->val < l2->val) {
36+
ret->next = l1;
37+
ret = l1;
38+
l1 = l1->next;
39+
} else {
40+
ret->next = l2;
41+
ret = l2;
42+
l2 = l2->next;
43+
}
44+
}
45+
46+
return res;
47+
}
48+
};

LeetCode/preorderTraversal.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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> preorderTraversal(TreeNode *root) {
13+
vector<int> ret;
14+
if (root == NULL) return ret;
15+
ret.push_back(root->val);
16+
vector<int> lt = preorderTraversal(root->left);
17+
vector<int> rt = preorderTraversal(root->right);
18+
for (int i = 0; i < lt.size(); ++i) ret.push_back(lt[i]);
19+
for (int i = 0; i < rt.size(); ++i) ret.push_back(rt[i]);
20+
return ret;
21+
}
22+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
4+
int m = obstacleGrid.size(), n = obstacleGrid[0].size();
5+
int mm[105][105];
6+
for (int i = 0; i < n; ++i) {
7+
mm[0][i] = 1;
8+
if (obstacleGrid[0][i] == 1) mm[0][i] = 0;
9+
if (i > 0 && mm[0][i - 1] == 0) mm[0][i] = 0;
10+
}
11+
for (int i = 0; i < m; ++i) {
12+
mm[i][0] = 1;
13+
if (obstacleGrid[i][0] == 1) mm[i][0] = 0;
14+
if (i > 0 && mm[i - 1][0] == 0) mm[i][0] = 0;
15+
}
16+
for (int i = 1; i < m; ++i) {
17+
for (int j = 1; j < n; ++j) {
18+
if (obstacleGrid[i][j] == 1) mm[i][j] = 0;
19+
else {
20+
mm[i][j] = mm[i - 1][j] + mm[i][j - 1];
21+
}
22+
}
23+
}
24+
return mm[m - 1][n - 1];
25+
}
26+
};

0 commit comments

Comments
 (0)