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