1. Integer Break (Leetcode Number: 343)
a. Brute Force solution
class Solution(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
st_res = []
if n == 2:
return 1
if n == 3:
return 2
if n == 4:
return 4
while n >= 3:
if n == 3:
st_res.append(3)
break
elif n == 5:
st_res.append(3)
st_res.append(2)
break
elif n == 4:
st_res.append(4)
break
else:
st_res.append(3)
n -= 3
res = st_res[0] * st_res[1]
for i in range(2, len(st_res)):
res *= st_res[i]
return res
b. Dynamic Programming
class Solution(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
dp = [0] * (n + 1)
dp[2] = 1
for i in range(3, n + 1):
for j in range(1, i / 2 + 1):
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))
return dp[n]
2. Unique Binary Search Trees (Leetcode Number: 96)
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
dp = [0] * (n + 1)
dp[0], dp[1] = 1, 1
for i in range(2, n + 1):
for j in range(1, i + 1):
dp[i] += dp[j - 1] * dp[i - j]
return dp[n]