File tree Expand file tree Collapse file tree 4 files changed +115
-0
lines changed Expand file tree Collapse file tree 4 files changed +115
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def threeSum (self , nums : List [int ]) -> List [List [int ]]:
3
+ # Naive Solution
4
+ # Tc : O(n^3) / Sc : O(nC_3)
5
+
6
+ n = len (nums )
7
+ """
8
+ for i in range(n-2):
9
+ for j in range(i+1,n-1):
10
+ for k in range(j+1, n):
11
+ if nums[i]+nums[j]+nums[k] == 0:
12
+ ret.add(tuple(sorted([nums[i], nums[j], nums[k]])))
13
+
14
+ ret = [x for x in ret]
15
+ return ret
16
+ """
17
+
18
+ # Better Solution
19
+ # two-sum question with fixed num (traversal in for loop)
20
+ # Tc : O(n^2) / Sc : O(n)
21
+ ret = []
22
+ nums .sort ()
23
+
24
+ for i in range (n ):
25
+ if i > 0 and nums [i ] == nums [i - 1 ]:
26
+ continue
27
+ j , k = i + 1 , n - 1
28
+
29
+ while j < k :
30
+ sum_ = nums [i ] + nums [j ] + nums [k ]
31
+ if sum_ < 0 : j += 1
32
+ elif sum_ > 0 : k -= 1
33
+ else :
34
+ ret .append ([nums [i ], nums [j ], nums [k ]])
35
+ j += 1
36
+
37
+ while nums [j ] == nums [j - 1 ] and j < k :
38
+ j += 1
39
+
40
+ return ret
41
+
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def climbStairs (self , n : int ) -> int :
3
+ """
4
+ dynamic programming
5
+ dp[0] = 1
6
+ dp[1] = 1
7
+ dp[2] = dp[0] + dp[1] = 2
8
+ dp[3] = dp[1] + dp[2] = 3
9
+ ...
10
+
11
+ Tc = O(n) / Sc = O(n)
12
+ """
13
+
14
+ dp = [1 for _ in range (n + 1 )]
15
+ for i in range (2 , n + 1 ):
16
+ dp [i ] = dp [i - 2 ] + dp [i - 1 ]
17
+ return dp [n ]
18
+
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def numDecodings (self , s : str ) -> int :
3
+ """
4
+ dp 이용 : 가능한 경우의 수를 구해놓고 그 뒤에 붙을 수 있는가?
5
+ ex) 1234
6
+ (1,2) -> (1,2,3)
7
+ (12) -> (12,3)
8
+ (1) -> (1,23)
9
+
10
+ Tc : O(n) / Sc : O(n)
11
+ """
12
+ if s [0 ] == '0' : return 0
13
+
14
+ n = len (s )
15
+ dp = [0 ]* (n + 1 )
16
+ dp [0 ] = dp [1 ] = 1
17
+
18
+ for i in range (2 , n + 1 ):
19
+ one = int (s [i - 1 ])
20
+ two = int (s [i - 2 :i ])
21
+
22
+ if 1 <= one <= 9 : dp [i ] += dp [i - 1 ]
23
+ if 10 <= two <= 26 : dp [i ] += dp [i - 2 ]
24
+
25
+ return dp [n ]
26
+
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def isAnagram (self , s : str , t : str ) -> bool :
3
+ if len (s ) != len (t ):
4
+ return False
5
+
6
+ # sort and compare
7
+ # Tc : O(nlogn) / Sc : O(n)(Because of python timsort)
8
+ """
9
+ s = sorted(s)
10
+ t = sorted(t)
11
+ for s_char, t_char in zip(s, t):
12
+ if s_char != t_char:
13
+ return False
14
+ return True
15
+ """
16
+
17
+ # dictionary to count letters
18
+ # Tc : O(n) / Sc : O(n)
19
+ letters_cnt = dict ()
20
+ INF = int (1e6 )
21
+ for s_char in s :
22
+ letters_cnt [s_char ] = letters_cnt .get (s_char ,0 )+ 1
23
+
24
+ for t_char in t :
25
+ letters_cnt [t_char ] = letters_cnt .get (t_char ,INF )- 1
26
+ if letters_cnt [t_char ] < 0 :
27
+ return False
28
+
29
+ return sum (letters_cnt .values ()) == 0
30
+
You can’t perform that action at this time.
0 commit comments