Skip to content

Commit 849f3ae

Browse files
authored
Merge pull request #179 from SamTheKorean/solution11
[SAM] Week 11 solutions
2 parents 658e0ac + 997903b commit 849f3ae

File tree

5 files changed

+87
-0
lines changed

5 files changed

+87
-0
lines changed

coin-change/samthekorean.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# a is number of amount and c is number of coins
2+
# TC : O(a∗c)
3+
# SC: O(a)
4+
class Solution:
5+
def coinChange(self, denominations: List[int], target_amount: int) -> int:
6+
minimum_coins = [target_amount + 1] * (target_amount + 1)
7+
minimum_coins[0] = 0
8+
9+
for current_amount in range(1, target_amount + 1):
10+
for coin in denominations:
11+
if current_amount - coin >= 0:
12+
minimum_coins[current_amount] = min(
13+
minimum_coins[current_amount],
14+
1 + minimum_coins[current_amount - coin],
15+
)
16+
17+
return minimum_coins[-1] if minimum_coins[-1] != target_amount + 1 else -1

decode-ways/samthekorean.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# TC : O(n)
2+
# SC : O(n)
3+
class Solution:
4+
def numDecodings(self, s: str) -> int:
5+
if not s or s[0] == "0":
6+
return 0
7+
8+
n = len(s)
9+
dp = [0] * (n + 1)
10+
dp[0] = 1
11+
dp[1] = 1
12+
13+
for i in range(2, n + 1):
14+
one_digit = int(s[i - 1])
15+
two_digits = int(s[i - 2 : i])
16+
17+
if one_digit != 0:
18+
dp[i] += dp[i - 1]
19+
20+
if 10 <= two_digits <= 26:
21+
dp[i] += dp[i - 2]
22+
23+
return dp[n]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# TC : O(n)
2+
# SC : O(1)
3+
class Solution:
4+
def maxProduct(self, nums: List[int]) -> int:
5+
max_overall = nums[0]
6+
current_min_product = current_max_product = 1
7+
8+
for num in nums:
9+
temp_min = min(current_min_product * num, current_max_product * num, num)
10+
current_max_product = max(
11+
current_min_product * num, current_max_product * num, num
12+
)
13+
current_min_product = temp_min
14+
max_overall = max(current_max_product, max_overall)
15+
16+
return max_overall
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# O(n^2)
2+
# O(1)
3+
class Solution:
4+
def countSubstrings(self, s: str) -> int:
5+
length, total_palindromes = len(s), 0
6+
7+
def countPalindromes(left: int, right: int) -> int:
8+
count = 0
9+
while left >= 0 and right < length and s[left] == s[right]:
10+
left -= 1
11+
right += 1
12+
count += 1
13+
return count
14+
15+
for i in range(length):
16+
total_palindromes += countPalindromes(i, i + 1) # even length palindromes
17+
total_palindromes += countPalindromes(i, i) # odd length palindromes
18+
19+
return total_palindromes

word-break/samthekorean.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# TC : O(s^2*w)
2+
# SC : O(s)
3+
class Solution:
4+
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
5+
dp = [True] + [False] * len(s)
6+
for n in range(1, len(s) + 1):
7+
for word in wordDict:
8+
if s[n - len(word) : n] == word:
9+
dp[n] = dp[n - len(word)]
10+
if dp[n]:
11+
break
12+
return dp[-1]

0 commit comments

Comments
 (0)