Skip to content

Commit 8ddeaea

Browse files
authored
[casentino] WEEK 04 Solutions
[casentino] WEEK 04 Solutions
2 parents d9e68ec + f486e1f commit 8ddeaea

File tree

5 files changed

+147
-0
lines changed

5 files changed

+147
-0
lines changed

coin-change/casentino.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function coinChange(coins: number[], amount: number): number {
2+
const dp = new Array(amount + 1).fill(amount);
3+
dp[0] = 0;
4+
for (let i = 1; i <= amount; i++) {
5+
for (let j = 0; j < coins.length; j++) {
6+
if (i - coins[j] >= 0) {
7+
dp[i] = Math.min(dp[i - coins[j]] + 1, dp[i]);
8+
}
9+
}
10+
}
11+
return dp[amount] === Number.POSITIVE_INFINITY ? -1 : dp[amount];
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function findMin(nums: number[]): number {
2+
let left = 0;
3+
let right = nums.length - 1;
4+
5+
while (left < right) {
6+
const middle = Math.floor((left + right) / 2);
7+
8+
if (nums[middle] < nums[right]) {
9+
right = middle;
10+
} else {
11+
left = middle + 1;
12+
}
13+
}
14+
return nums[left];
15+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function maxDepth(root: TreeNode | null): number {
16+
function recursive(node: TreeNode | null, count: number) {
17+
if (!node) {
18+
return count;
19+
}
20+
const left = recursive(node.left, count + 1);
21+
const right = recursive(node.right, count + 1);
22+
return left > right ? left : right;
23+
}
24+
return recursive(root, 0);
25+
}
26+
27+
class TreeNode {
28+
val: number;
29+
left: TreeNode | null;
30+
right: TreeNode | null;
31+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
32+
this.val = val === undefined ? 0 : val;
33+
this.left = left === undefined ? null : left;
34+
this.right = right === undefined ? null : right;
35+
}
36+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* class ListNode {
4+
* val: number
5+
* next: ListNode | null
6+
* constructor(val?: number, next?: ListNode | null) {
7+
* this.val = (val===undefined ? 0 : val)
8+
* this.next = (next===undefined ? null : next)
9+
* }
10+
* }
11+
*/
12+
13+
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
14+
if (!list1 || !list2) {
15+
return list1 ?? list2;
16+
}
17+
function merge(node1: ListNode | null, node2: ListNode | null) {
18+
if (!node1 || !node2) {
19+
return node1 ?? node2;
20+
}
21+
if (node1.val < node2.val) {
22+
node1.next = merge(node1.next, node2);
23+
}
24+
if (node1.val >= node2.val) {
25+
node2.next = merge(node1, node2.next);
26+
}
27+
28+
return node1.val < node2.val ? node1 : node2;
29+
}
30+
return merge(list1, list2);
31+
}
32+
33+
class ListNode {
34+
val: number;
35+
next: ListNode | null;
36+
constructor(val?: number, next?: ListNode | null) {
37+
this.val = val === undefined ? 0 : val;
38+
this.next = next === undefined ? null : next;
39+
}
40+
}

word-search/casentino.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
function exist(board: string[][], word: string): boolean {
2+
const m = board.length;
3+
const n = board[0].length;
4+
5+
const visited = Array.from({ length: m }, () => new Array(n).fill(0));
6+
function findDirection(currentI: number, currentJ: number, findNextIdx: number) {
7+
if (findNextIdx === word.length) {
8+
return true;
9+
}
10+
if (
11+
currentI < 0 ||
12+
currentJ < 0 ||
13+
currentI >= m ||
14+
currentJ >= n ||
15+
board[currentI][currentJ] !== word[findNextIdx]
16+
) {
17+
return false;
18+
}
19+
if (visited[currentI][currentJ] === 1) {
20+
return false;
21+
}
22+
visited[currentI][currentJ] = 1;
23+
24+
const isApproachLastWord =
25+
findDirection(currentI + 1, currentJ, findNextIdx + 1) ||
26+
findDirection(currentI - 1, currentJ, findNextIdx + 1) ||
27+
findDirection(currentI, currentJ - 1, findNextIdx + 1) ||
28+
findDirection(currentI, currentJ + 1, findNextIdx + 1);
29+
30+
if (!isApproachLastWord) {
31+
visited[currentI][currentJ] = 0;
32+
}
33+
return isApproachLastWord;
34+
}
35+
for (let i = 0; i < m; i++) {
36+
for (let j = 0; j < n; j++) {
37+
const result = findDirection(i, j, 0);
38+
if (result) {
39+
return true;
40+
}
41+
}
42+
}
43+
return false;
44+
}

0 commit comments

Comments
 (0)