Skip to content

Commit

Permalink
Merge pull request #762 from HodaeSsi/main
Browse files Browse the repository at this point in the history
[HodaeSsi] Week 02
  • Loading branch information
HodaeSsi authored Dec 21, 2024
2 parents e5cf9af + 105a6b8 commit 8f45cfd
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 0 deletions.
21 changes: 21 additions & 0 deletions 3sum/HodaeSsi.py
Original file line number Diff line number Diff line change
@@ -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)

12 changes: 12 additions & 0 deletions climbing-stairs/HodaeSsi.py
Original file line number Diff line number Diff line change
@@ -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]

Original file line number Diff line number Diff line change
@@ -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)

28 changes: 28 additions & 0 deletions decode-ways/HodaeSsi.py
Original file line number Diff line number Diff line change
@@ -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]

19 changes: 19 additions & 0 deletions valid-anagram/HodaeSsi.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 8f45cfd

Please sign in to comment.