LeetCode276 柵欄塗色

2021-09-28 15:06:41 字數 1253 閱讀 5753

1.題目描述

有 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

2.解法

解法一:動態規劃

'''當前柵欄的塗色方案有兩種

和前乙個顏色相同,此時說明前乙個的柵欄的顏色應與更前面乙個柵欄的顏色不同,更前乙個柵欄的塗色方法有 f(n - 2) 種,前乙個柵欄的塗色方式有 (k - 1) 種,所以此時情況應為 f(n - 2) * (k - 1)

和前乙個顏色不同,前乙個柵欄的塗色方法有 f(n - 1) 種,當前柵欄的塗色方式有 (k - 1) 種,此時情況應為 f(n - 1) * (k - 1)

所以遞推公式應為 f(n) = f(n - 2) * (k - 1) + f(n - 1) * (k - 1)

'''class solution:

def numways(self, n: int, k: int) -> int:

if n < 1:

return 0

if n == 1:

return k

if n == 2:

return k * k

ppre = k

pre = k * k

result = k * k

for i in range(3, n + 1):

result = (ppre + pre) * (k-1)

ppre = pre

pre = result

return result

LeetCode 276 柵欄塗色

有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。注意 n 和 k 均為非負的整數。示例 輸入 n 3,k 2 輸出 6 解析 用 c1 表示顏色 1,c...

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