File tree Expand file tree Collapse file tree 5 files changed +117
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +117
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution :
2+ # Space complexity: O(1)
3+ # Tiem complexity: O(n)
4+ def climbStairs (self , n : int ) -> int :
5+ # dp[0] is n - 2
6+ # dp[1] is n - 1
7+ dp = [1 , 2 ]
8+
9+ if n <= 2 :
10+ return dp [n - 1 ]
11+
12+ for i in range (3 , n + 1 ):
13+ # dp[n] = dp[n - 1] + dp[n - 2]
14+ # = dp[1] + dp[0]
15+ dp [(i - 1 ) % 2 ] = sum (dp )
16+
17+ return dp [(n - 1 ) % 2 ]
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # Space complexity: O(n)
3+ # Time complexity: O(n * m)
4+ # - n: amount
5+ # - m: len(coins)
6+ def coinChange (self , coins : list [int ], amount : int ) -> int :
7+ INIT_VALUE = 999999999
8+ dp = [INIT_VALUE ] * (amount + 1 )
9+ dp [0 ] = 0
10+
11+ for x in range (1 , amount + 1 ):
12+ for coin in coins :
13+ if x - coin >= 0 :
14+ dp [x ] = min (dp [x ], dp [x - coin ] + 1 )
15+
16+ return dp [amount ] if dp [amount ] != INIT_VALUE else - 1
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # Space complexity: O(n)
3+ # - n: len(candidates)
4+ # - Stack Frame -> O(n)
5+ # - list_of_combination -> O(n) ?
6+ # Time complexity: O(n!)
7+ def combinationSum (self , candidates : List [int ], target : int ) -> List [List [int ]]:
8+ list_of_combination = []
9+ n = len (candidates )
10+
11+ def backtracking (curr : int , curr_combination : List [int ], curr_sum : int ):
12+ if curr_sum == target : # 목표값에 도달했을 경우
13+ list_of_combination .append (list (curr_combination ))
14+ return
15+
16+ if curr_sum > target : # 목표값을 초과한 경우
17+ return
18+
19+ for i in range (curr , n ):
20+ curr_combination .append (candidates [i ])
21+ backtracking (i , curr_combination , curr_sum + candidates [i ])
22+ curr_combination .pop () # 백트래킹 과정에서 마지막 요소 제거
23+
24+ backtracking (0 , [], 0 )
25+ return list_of_combination
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # Space complexity: O(n)
3+ # Time complexity: O(n)
4+ def naive (self , nums : list [int ]) -> list [int ]:
5+ prefix = [1 ]
6+ for num in nums [:- 1 ]:
7+ prefix .append (prefix [- 1 ] * num )
8+
9+ reverse_nums = nums [::- 1 ]
10+ postfix = [1 ]
11+ for num in reverse_nums [:- 1 ]:
12+ postfix .append (postfix [- 1 ] * num )
13+ postfix = postfix [::- 1 ]
14+
15+ return [prefix [i ] * postfix [i ] for i in range (len (nums ))]
16+
17+ # Space complexity: O(1)
18+ # Time complexity: O(n)
19+ def with_constant_space (self , nums : list [int ]) -> list [int ]:
20+ n = len (nums )
21+ answer = [1 ] * n
22+
23+ # 1. save prefix product to temp
24+ temp = 1
25+ for i in range (1 , n ):
26+ temp *= nums [i - 1 ]
27+ answer [i ] *= temp
28+
29+ # 2. save postfix product to temp
30+ temp = 1
31+ for i in range (n - 2 , - 1 , - 1 ):
32+ temp *= nums [i + 1 ]
33+ answer [i ] *= temp
34+
35+ return answer
36+
37+
38+ def productExceptSelf (self , nums : List [int ]) -> List [int ]:
39+ # index -> product
40+ # 0 -> - [1, 2, 3]
41+ # 1 -> [0] - [2, 3]
42+ # 2 -> [0, 1] - [3]
43+ # 3 -> [0, 1, 2] -
44+ return self .with_constant_space (nums )
45+
46+
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # Space complexity: O(n)
3+ # Time complexity: O(n)
4+ def twoSum (self , nums : list [int ], target : int ) -> list [int ]:
5+ num_index = {}
6+ for curr , num in enumerate (nums ):
7+ rest = target - num
8+ if rest in num_index :
9+ return [num_index [rest ], curr ]
10+ else :
11+ num_index [num ] = curr
12+ return [0 , 0 ]
13+
You can’t perform that action at this time.
0 commit comments