Leetcode 276. Paint Fence (Python)
Related Topic
Description
There is a fence with n posts, each post can be painted with one of the k colors.
You have to paint all the posts such that no more than two adjacent fence posts have the same color.
Return the total number of ways you can paint the fence.
Sample I/O
Example 1
Input: n = 3, k = 2
Output: 6
Explanation: Take c1 as color 1, c2 as color 2. All possible ways are:
post1 post2 post3
----- ----- ----- -----
1 c1 c1 c2
2 c1 c2 c1
3 c1 c2 c2
4 c2 c1 c1
5 c2 c1 c2
6 c2 c2 c1
Note:
n and k are non-negative integers.
Methodology
This question can be solved by Dynamic Programming implicitly. I did not figure out the solution until I found a great video from youtube. And the explaination is very clear. I am going to share here.
Code
def numWays(self, n: int, k: int) -> int:
if n == 0:
return 0
if n == 1:
return k
same, dif = k, k*(k-1)
for i in range(3, n+1):
same, dif = dif, (same+dif)*(k-1)
return same + dif
BigO
The total cost is will be O(n-2)