Skip to content

Commit 997693f

Browse files
authored
Merge pull request #2050 from radiantchoi/main
[radiantchoi] WEEK 02 Solutions
2 parents 8fc7bd0 + e7ffca0 commit 997693f

File tree

6 files changed

+109
-0
lines changed

6 files changed

+109
-0
lines changed

.github/workflows/integration.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ name: Integration 🔄
22

33
on:
44
pull_request:
5+
merge_group:
56

67
jobs:
78
linelint:
89
runs-on: ubuntu-latest
10+
if: github.event_name == 'pull_request'
911
steps:
1012
- uses: actions/checkout@v4
1113
with:

3sum/radiantchoi.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution:
2+
def twoSum(self, target: int, nums: List[int], starting: int) -> List[List[int]]:
3+
left = starting
4+
right = len(nums) - 1
5+
6+
result = []
7+
8+
while left < right:
9+
if nums[left] + nums[right] == target:
10+
result.append([nums[left], nums[right]])
11+
left += 1
12+
right -= 1
13+
14+
while left < right and nums[left] == nums[left - 1]:
15+
left += 1
16+
17+
while left < right and nums[right] == nums[right + 1]:
18+
right -= 1
19+
elif nums[left] + nums[right] > target:
20+
right -= 1
21+
else:
22+
left += 1
23+
24+
return result
25+
26+
def kSum(self, n: int, target: int, nums: List[int], starting: int) -> List[List[int]]:
27+
if n < 2 or starting == len(nums):
28+
return []
29+
elif n == 2:
30+
return self.twoSum(target, nums, starting)
31+
32+
result = []
33+
34+
for i in range(starting, len(nums) - n + 1):
35+
if i > starting and nums[i] == nums[i - 1]:
36+
continue
37+
38+
for tail in self.kSum(n - 1, target - nums[i], nums, i + 1):
39+
result.append([nums[i]] + tail)
40+
41+
return result
42+
43+
def threeSum(self, nums: List[int]) -> List[List[int]]:
44+
nums.sort()
45+
return self.kSum(3, 0, nums, 0)

climbing-stairs/radiantchoi.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
stairs = [1, 1]
4+
5+
if n > 1:
6+
for i in range(2, n+1):
7+
stairs.append(stairs[i - 1] + stairs[i - 2])
8+
9+
return stairs[-1]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
reduced = 1
4+
zeroes = 0
5+
6+
for num in nums:
7+
if num != 0:
8+
reduced *= num
9+
else:
10+
zeroes += 1
11+
12+
result = []
13+
14+
for num in nums:
15+
if num == 0:
16+
result.append(0 if zeroes - 1 > 0 else reduced)
17+
else:
18+
result.append(0 if zeroes else reduced // num)
19+
20+
return result

valid-anagram/radiantchoi.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def isAnagram(self, s: str, t: str) -> bool:
3+
s_letters = {}
4+
t_letters = {}
5+
6+
for letter in s:
7+
s_letters[letter] = s_letters.get(letter, 0) + 1
8+
9+
for letter in t:
10+
t_letters[letter] = t_letters.get(letter, 0) + 1
11+
12+
return s_letters == t_letters
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def check(self, root: Optional[TreeNode], minimum: int, maximum: int) -> bool:
9+
if root is None:
10+
return True
11+
12+
if root.val <= minimum or root.val >= maximum:
13+
return False
14+
15+
return self.check(root.left, minimum, root.val) and self.check(root.right, root.val, maximum)
16+
17+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
18+
minimum_constraint = ((-2) ** 31) - 1
19+
maximum_constraint = 2 ** 31
20+
21+
return self.check(root, minimum_constraint, maximum_constraint)

0 commit comments

Comments
 (0)