0231. Power of Two / 0118. Pascal's Triangle
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n <= 0: return False
def pot(n):
if n == 1:
return True
if n%2 == 1:
return False
return pot(n//2)
return pot(n)
๐ 0231) ํฐ problem์ 2๋ก ๊ณ์ ๋๋๋ฉฐ sub-problem์ผ๋ก ์๊ฒ ์ชผ๊ฐ๋ฉฐ ๊ณ์ ๋ฌธ์ ๋ฅผ ํ์ด๋๊ฐ๋ ๋ฐฉ์์ Recursion์ ์ฌ์ฉํด์ผ ํจ์ ์ง๊ด์ ์ผ๋ก ์ ์ ์๋ค. ๋จผ์ n == 1 / n%2 == 1 base case๋ฅผ ์๊ฐํ๊ณ / ๊ทธ๋ ์ง ์๋ค๋ฉด pot(n//2)๋ก ์๊ฒ ์ชผ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ๋ฉด OK
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
ans = [[1]]
for i in range(1,numRows):
row = []
for j in range(0,i+1):
if j == 0 or j == i:
row.append(1)
else:
row.append(ans[i-1][j-1]+ans[i-1][j])
ans.append(row)
return ans
๐ 0118) ๊ณต์์ ๋ง๊ฒ dp table ์ฑ์๋๊ฐ๋ฉด ๋๋ค.
0746. Min Cost Climbing Stairs / 1768. Merge Strings Alternately
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [cost[0], cost[1]]
for i in range(2, len(cost)):
dp.append(min(dp[-1],dp[-2])+cost[i])
return min(dp[-1],dp[-2])
๐ 0746) DP ๋ฌธ์ . ๊ฐ dp์ element๋ ํด๋น element ๋ฒ์งธ์ stair๋ฅผ ๋ฐ๋์ ๋ฐ์๋ค๊ณ ํ์ ๋์ min cost๋ก ์ ์. ๊ทธ๋ฌ๋ฉด i๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์์ ๋์ min cost dp[i]๋ ์์ ๋ฐ๋ก ์ ๊ณ๋จ์ ๋ฐ์์ ๋์ / ๋ฐ๋ก ๋๋ฒ์งธ ์ ๊ณ๋จ์ ๋ฐ์์ ๋์ cost ์ค ์ต์๊ฐ์ ํ์ฌ ๊ณ๋จ์ ๋ฐ์์ ๋์ ๊ฐ์ด๋ค. ์ดํ ์ญ dp๋ฅผ ์ ๋ฐ์ดํธ ํ ํ, ๋งจ ๋ง์ง๋ง ๊ณ๋จ์ ๋ฐ์์ ๋ / ๋งจ ๋ง์ง๋ง ๋ฐ๋ก ์ ๊ณ๋จ์ ๋ฐ์์ ๋์ cost ์ค ์ต์๊ฐ์ผ๋ก ์ ๋ต ๋ฆฌํด
class Solution:
def mergeAlternately(self, word1: str, word2: str) -> str:
ans = ''
for x in range(min(len(word1),len(word2))):
ans += word1[x]
ans += word2[x]
if len(word1) > len(word2):
ans += word1[len(word2):]
elif len(word2) > len(word1):
ans += word2[len(word1):]
return ans
๐ 1768) ์ฃผ์ด์ง ์ง์์ฌํญ๋๋ก merging ์งํ. ๋จ, ๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ, ํฐ ๋ฌธ์์ด์ ์ค๋ฅธ์ชฝ ๋๋จธ์ง๋ฅผ ๋ถ์ธ๋ค.
1071. Greatest Common Divisor of Strings / 2215. Find the Difference of Two Arrays
class Solution:
def gcdOfStrings(self, str1: str, str2: str) -> str:
len1, len2 = len(str1), len(str2)
def valid(k):
if len1 % k or len2 % k:
return False
n1, n2 = len1 // k, len2 // k
base = str1[:k]
return str1 == n1 * base and str2 == n2 * base
for i in range(min(len1, len2), 0, -1):
if valid(i):
return str1[:i]
return ""
๐ ๋ ๋ฌธ์์ด ์ค ๊ธธ์ด๊ฐ ์์ ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ํด๋น ๋ฌธ์์ด ์ ์ฒด ๋ฌธ์์ด๋ถํฐ ์ค๋ฅธ์ชฝ๋ถํฐ ๋งจ ์ผ์ชฝ๊น์ง ํ ๊ฐ์ฉ ๊ธ์๋ฅผ ์ค์ด๋ฉด์ ํด๋น ๋ฌธ์์ด์ด GCD ๋ฌธ์์ด์ธ์ง ์ง์ ํ์ธ
class Solution:
def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]:
nums1_kind, nums2_kind = set(nums1), set(nums2)
l,r=set(),set()
for num in nums1:
if num not in nums2_kind:
l.add(num)
for num in nums2:
if num not in nums1_kind:
r.add(num)
return [list(l),list(r)]
'LeetCode Problems > Easy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ LeetCode Easy Collections II - 20 Problems (1) | 2024.09.02 |
---|---|
๐ LeetCode Easy Collections I - 20 Problems (1) | 2024.08.05 |
๋๊ธ