不能有超过连续两根柱子是一个颜色,也就意味着第三根柱子要么根第一个柱子不是一个颜色,要么跟第二根柱子不是一个颜色。如果不是同一个颜色,计算可能性的时候就要去掉之前的颜色,也就是k-1种可能性。假设dp[1]
是第一根柱子及之前涂色的可能性数量,dp[2]
是第二根柱子及之前涂色的可能性数量,则dp[3]=(k-1)*dp[1]+(k-1)*dp[2]
。
class Solution {
int numWays(int n, int k) {
// Write your code here
int a[n-1];
a[0] = k;
a[1] = k*k;
for(int i = 2;i < n;i++){
a[i] = (k-1)*(a[i-1]+a[i-2]);
}
return a[n-1];
}
};