我被困在lintcode上的這個問題上,我已經閱讀了兩個過去的解決方案,但是他們都對我沒有意義。如何處理此組合柵欄 - 繪製算法?
的問題是如下:
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.
給定n = 3,K = 2,返回6.
所以我明白的部分是,如果n = 0(我們有0篇)或k = 0(我們有0油漆),我們不能畫什麼那麼返回0
而且如果n == 1,後可以以K的方式畫如此復位K
當n 2,如果相鄰,我們可以用K * 1的方式繪製它如果相鄰職位不同,職位相等,K *(K-1)方式。如果n == 3或更多:相同的相鄰顏色將是:K * 1 * K-1 * 1 * K-1 ... 而且不同的是:K * K-1 * K-1。 ...
我該怎麼辦?我見過一個人再次創建了一個[0,k,2k和0]矩陣,另一個人簡化了「不同顏色」爲(k + k *(k-1))*(k-1)不知道怎麼其中任何跳轉到他們的結論
編輯的那一步:一個傢伙的解決方案如下:
class Solution:
# @param {int} n non-negative integer, n posts
# @param {int} k non-negative integer, k colors
# @return {int} an integer, the total number of ways
def numWays(self, n, k):
# Write your code here
table = [0, k, k*k, 0]
if n <= 2:
return table[n]
# recurrence equation
# table[posts] = (color - 1) * (table[posts - 1] + table[posts - 2])
for i in range(3, n + 1):
table[3] = (k - 1) * (table[1] + table[2])
table[1], table[2] = table[2], table[3]
return table[3]
,但我不能瞭解他爲什麼[0]結束他的表格,以及他如何設置遞推方程