有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。
你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。
注意:n 和 k 均為非負的整數。
示例:輸入: n = 3,k = 2
輸出: 6
解析: 用 c1 表示顏色 1,c2 表示顏色 2,所有可能的塗色方案有:
柱 1 柱 2 柱 3
----- ----- ----- -----
1 c1 c1 c2
2 c1 c2 c1
3 c1 c2 c2
4 c2 c1 c1
5 c2 c1 c2
6 c2 c2 c1
用dp[n]來代表塗完前n個柵欄的解。
先分類討論一下:
1. 如果當前柵欄跟前乙個柵欄塗一樣的顏色,可能性有 dp[n - 2] * ( k - 1)
2. 如果當前柵欄跟前乙個柵欄塗不一樣的顏色,可能性有 dp[n - 1)] * (k - 1)
所以 dp[n] = (dp[n - 2] + dp[n - 1] )* (k - 1)
class solution(object):
def numways(self, n, k):
""":type n: int
:type k: int
:rtype: int
"""dp = [0] * (n + 3)
dp[0], dp[1], dp[2] = 0, k, k * k
for i in range(3, n + 1):
dp[i] = dp[i - 1] * (k - 1) + dp[i - 2] * (k - 1)
return dp[n]
LeetCode276 柵欄塗色
1.題目描述 有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。注意 n 和 k 均為非負的整數。示例 輸入 n 3,k 2 輸出 6 解析 用 c1 表...
276 柵欄塗色
題目描述 有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。注意 n 和 k 均為非負的整數。示例 輸入 n 3,k 2 輸出 6 解析 用 c1 表示顏...
276 柵欄塗色
當只有乙個柱子需要塗色時,有k種可塗色方案 當有兩個柱子需要塗色時,有k k 1 diff k same 種塗色方案 當有三個柱子需要塗色時,有 same diff k 1 diff diff same 種方案。1 class solution object 2def numways self,n,...