1.題目描述
有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。2.解法你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。
注意: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
解法一:動態規劃
'''當前柵欄的塗色方案有兩種
和前乙個顏色相同,此時說明前乙個的柵欄的顏色應與更前面乙個柵欄的顏色不同,更前乙個柵欄的塗色方法有 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,...