LeetCode 276 柵欄塗色

2021-10-02 11:52:22 字數 1037 閱讀 9372

有 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,...