Skip to content

Commit fe698da

Browse files
authored
Create number-of-ways-to-build-house-of-cards.py
1 parent 55f5d66 commit fe698da

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Time: O(n^2)
2+
# Space: O(n)
3+
4+
# dp
5+
class Solution(object):
6+
def houseOfCards(self, n):
7+
"""
8+
:type n: int
9+
:rtype: int
10+
"""
11+
dp = [0]*(n+1) # dp[i]: number of ways with i cards and at most t triangles in the first row
12+
dp[0] = 1
13+
for t in xrange(1, (n+1)//3+1):
14+
for i in reversed(xrange(3*t-1, n+1)):
15+
dp[i] += dp[i-(3*t-1)]
16+
return dp[n]
17+
18+
19+
# Time: O(n^3)
20+
# Space: O(n^2)
21+
# dp
22+
class Solution_TLE(object):
23+
def houseOfCards(self, n):
24+
"""
25+
:type n: int
26+
:rtype: int
27+
"""
28+
dp = [[0]*(n+1) for _ in xrange((n+1)//3+1)] # dp[t][i]: number of ways with i cards and t triangles in the first row
29+
dp[0][0] = 1
30+
for t in xrange(1, (n+1)//3+1):
31+
for i in xrange(3*t-1, n+1):
32+
dp[t][i] = sum(dp[j][i-(3*t-1)] for j in xrange(t))
33+
return sum(dp[t][n] for t in xrange((n+1)//3+1))

0 commit comments

Comments
 (0)