Skip to content

Commit eb24f57

Browse files
author
sangbeenmoon
committed
week3.
1 parent b3a3b27 commit eb24f57

3 files changed

Lines changed: 76 additions & 0 deletions

File tree

combination-sum/sangbeenmoon.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,34 @@ def go(self, i:int, candidates: List[int], nums: List[int], sum_: int, target: i
1818
nums.append(candidates[j])
1919
self.go(j, candidates, nums, sum_ + candidates[j], target)
2020
nums.pop()
21+
22+
23+
24+
# ----
25+
26+
# TC : O(n^(T/M))
27+
# SC : O(T/M)
28+
29+
30+
class Solution:
31+
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
32+
33+
answer = []
34+
35+
def go(sub_answer: List[int], idx: int, sub_sum: int):
36+
37+
if sub_sum == target:
38+
answer.append(sub_answer.copy())
39+
return
40+
41+
for i in range(idx, len(candidates)):
42+
43+
if sub_sum + candidates[i] <= target:
44+
sub_answer.append(candidates[i])
45+
go(sub_answer, i, sub_sum + candidates[i])
46+
sub_answer.pop()
47+
48+
go([], 0, 0)
49+
50+
return answer
51+

decode-ways/sangbeenmoon.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,30 @@ def numDecodings(self, s: str) -> int:
3434
return 0
3535

3636
return dp[len(s) - 1]
37+
38+
# ----
39+
40+
class Solution:
41+
def numDecodings(self, s: str) -> int:
42+
if s[0] == '0':
43+
return 0
44+
45+
if len(s) == 1:
46+
return 1
47+
48+
dp = [1] * len(s)
49+
50+
for i in range(1, len(s)):
51+
if s[i] == "0":
52+
if 10 <= int(s[i-1:i+1]) and int(s[i-1:i+1]) <= 20:
53+
dp[i] = dp[i-2]
54+
else:
55+
return 0
56+
else:
57+
if 10 < int(s[i-1:i+1]) and int(s[i-1:i+1]) <= 26:
58+
dp[i] = dp[i-1] + dp[i-2]
59+
else:
60+
dp[i] = dp[i-1]
61+
62+
return dp[len(s) - 1]
63+

maximum-subarray/sangbeenmoon.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,21 @@ def maxSubArray(self, nums: List[int]) -> int:
1010
dp[i] = max(nums[i], nums[i] + dp[i-1])
1111

1212
return max(dp)
13+
14+
# ---
15+
# TC : O(n)
16+
# SC : O(1)
17+
18+
class Solution:
19+
def maxSubArray(self, nums: List[int]) -> int:
20+
sub_sum = 0
21+
ans = nums[0]
22+
23+
for num in nums:
24+
if sub_sum >= 0:
25+
sub_sum = sub_sum + num
26+
else:
27+
sub_sum = num
28+
ans = max(ans, sub_sum)
29+
30+
return ans

0 commit comments

Comments
 (0)