diff --git a/3sum/HodaeSsi.py b/3sum/HodaeSsi.py new file mode 100644 index 000000000..6b8d4a9ad --- /dev/null +++ b/3sum/HodaeSsi.py @@ -0,0 +1,21 @@ +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + answerSet = set() + nums.sort() + + for i in range(len(nums) - 2): + leftIdx = i + 1 + rightIdx = len(nums) - 1 + while leftIdx < rightIdx: + sum = nums[i] + nums[leftIdx] + nums[rightIdx] + if sum < 0: + leftIdx += 1 + elif sum > 0: + rightIdx -= 1 + else: + answerSet.add((nums[i], nums[leftIdx], nums[rightIdx])) + leftIdx = leftIdx + 1 + rightIdx = rightIdx - 1 + + return list(answerSet) + diff --git a/climbing-stairs/HodaeSsi.py b/climbing-stairs/HodaeSsi.py new file mode 100644 index 000000000..9569abed0 --- /dev/null +++ b/climbing-stairs/HodaeSsi.py @@ -0,0 +1,12 @@ +class Solution: + def climbStairs(self, n: int) -> int: + dp = [] + dp.append(0) + dp.append(1) + dp.append(2) + + for i in range(3, n + 1): + dp.append(dp[i - 1] + dp[i - 2]) + + return dp[n] + diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal/HodaeSsi.py b/construct-binary-tree-from-preorder-and-inorder-traversal/HodaeSsi.py new file mode 100644 index 000000000..bd42d364a --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal/HodaeSsi.py @@ -0,0 +1,12 @@ +class Solution: + def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]: + if inorder == []: + return None + + mid = preorder.pop(0) + midIdx = inorder.index(mid) + left = self.buildTree(preorder, inorder[:midIdx]) + right = self.buildTree(preorder, inorder[midIdx + 1:]) + + return TreeNode(mid, left, right) + diff --git a/decode-ways/HodaeSsi.py b/decode-ways/HodaeSsi.py new file mode 100644 index 000000000..f818f6fda --- /dev/null +++ b/decode-ways/HodaeSsi.py @@ -0,0 +1,28 @@ +class Solution: + def numDecodings(self, s: str) -> int: + dp = [] + if (s[0] == '0'): + return 0 + dp.append(1) + + for idx, _ in enumerate(s): + if idx == 0: + continue + if s[idx] == '0': + if s[idx-1] == '1' or s[idx-1] == '2': + if idx == 1: + dp.append(1) + else: + dp.append(dp[idx-2]) + else: + return 0 + elif s[idx-1] == '1' or (s[idx-1] == '2' and (s[idx] >= '1' and s[idx] <= '6')): + if idx == 1: + dp.append(2) + else: + dp.append(dp[idx-1] + dp[idx-2]) + else: + dp.append(dp[idx-1]) + + return dp[-1] + diff --git a/valid-anagram/HodaeSsi.py b/valid-anagram/HodaeSsi.py new file mode 100644 index 000000000..73a89bd1e --- /dev/null +++ b/valid-anagram/HodaeSsi.py @@ -0,0 +1,19 @@ +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + sLetterDict = {} + tLetterDict = {} + + for letter in s: + sLetterDict[letter] = sLetterDict.get(letter, 0) + 1 + for letter in t: + tLetterDict[letter] = tLetterDict.get(letter, 0) + 1 + + if len(sLetterDict) != len(tLetterDict): + return False + + for sKey in sLetterDict.keys(): + if sKey not in tLetterDict or sLetterDict[sKey] != tLetterDict[sKey]: + return False + + return True +