Skip to content

Commit 541e16b

Browse files
authored
Merge pull request #2131 from dylan-jung/main
[dylan-jung] WEEK 04 solutions
2 parents 0fdd100 + 4878256 commit 541e16b

File tree

6 files changed

+172
-0
lines changed

6 files changed

+172
-0
lines changed

coin-change/dylan-jung.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+
long dp[10001];
4+
int coinChange(vector<int>& coins, int amount) {
5+
long INF = (long)1 << 31;
6+
fill(dp, dp+10001, INF);
7+
8+
for(int& item: coins) {
9+
if(item > 10000) continue;
10+
dp[item] = 1;
11+
}
12+
13+
for(int i = 1; i <= amount; i++) {
14+
for(int& item: coins) {
15+
int j = i - item;
16+
if(j > 0 && dp[j] != -1) {
17+
dp[i] = min(dp[j] + 1, dp[i]);
18+
}
19+
}
20+
}
21+
22+
if(dp[amount] == INF) {
23+
if(amount == 0) return 0;
24+
else return -1;
25+
}
26+
return dp[amount];
27+
}
28+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Codec {
2+
public:
3+
string encode(vector<string>& strs) {
4+
string result;
5+
for (const string& s : strs) {
6+
result += to_string(s.size()) + "#" + s;
7+
}
8+
return result;
9+
}
10+
11+
vector<string> decode(string s) {
12+
vector<string> result;
13+
int i = 0;
14+
while (i < s.size()) {
15+
int j = i;
16+
while (s[j] != '#') j++;
17+
int length = stoi(s.substr(i, j - i));
18+
string cur = s.substr(j + 1, length);
19+
result.push_back(cur);
20+
i = j + 1 + length;
21+
}
22+
return result;
23+
}
24+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
int findMin(vector<int>& nums) {
4+
int l = 0; int r = nums.size() - 1;
5+
int min = -10000;
6+
if(nums[l] <= nums[r]) return nums[0]; // ordered case
7+
while(l <= r) {
8+
int mid = (l+r)/2;
9+
if(nums[l] > nums[mid]) {
10+
min = mid;
11+
r = mid;
12+
}
13+
else if(nums[mid] > nums[r]) {
14+
min = mid+1;
15+
l = mid+1;
16+
}
17+
else {
18+
break;
19+
}
20+
}
21+
return nums[min];
22+
}
23+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
int dfs(TreeNode* root, int depth) {
15+
int ret = depth;
16+
if(root->left) ret = max(ret, dfs(root->left, depth+1));
17+
if(root->right) ret = max(ret, dfs(root->right, depth+1));
18+
return ret;
19+
}
20+
21+
int maxDepth(TreeNode* root) {
22+
if(!root) return 0;
23+
return dfs(root, 1);
24+
}
25+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
14+
ListNode dummy;
15+
ListNode* tail = &dummy;
16+
17+
while (list1 && list2) {
18+
if (list1->val < list2->val) {
19+
tail->next = list1;
20+
list1 = list1->next;
21+
} else {
22+
tail->next = list2;
23+
list2 = list2->next;
24+
}
25+
tail = tail->next;
26+
}
27+
28+
tail->next = list1 ? list1 : list2;
29+
30+
return dummy.next;
31+
}
32+
};

word-search/dylan-jung.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
public:
3+
vector<vector<char>> g_board;
4+
int m, n;
5+
int dx[4] = { -1, 1, 0, 0 };
6+
int dy[4] = { 0, 0, -1, 1 };
7+
bool visited[6][6];
8+
9+
bool hasWord(string word, int idx, int r, int c) {
10+
if(idx >= word.size()) return true;
11+
if(!(0 <= r && r < n && 0 <= c && c < m)) return false;
12+
if(g_board[r][c] != word[idx]) return false;
13+
if(visited[r][c]) return false;
14+
visited[r][c] = true;
15+
// cout << r << " " << c << " " << word[idx] << "\n";
16+
for(int i = 0; i < 4; i++) {
17+
int nr = r + dx[i];
18+
int nc = c + dy[i];
19+
if(hasWord(word, idx+1, nr, nc))
20+
return true;
21+
}
22+
visited[r][c] = false;
23+
return false;
24+
}
25+
26+
bool exist(vector<vector<char>>& board, string word) {
27+
g_board = board;
28+
n = board.size();
29+
m = board[0].size();
30+
for(int i = 0; i < n; i++) {
31+
for(int j = 0; j < m; j++) {
32+
if(g_board[i][j] == word[0]) {
33+
fill(&visited[0][0], &visited[0][0]+36, false);
34+
if(hasWord(word, 0, i, j)) return true;
35+
}
36+
}
37+
}
38+
return false;
39+
}
40+
};

0 commit comments

Comments
 (0)