题目描述:
有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色。
你需要给所有栅栏柱上色,并且保证其中相邻的栅栏柱 最多连续两个 颜色相同。然后,返回所有有效涂色的方案数。
注意:
n 和 k 均为非负的整数。
示例:
输入: n = 3,k = 2
输出: 6
解析: 用 c1 表示颜色 1,c2 表示颜色 2,所有可能的涂色方案有:
方法1:
主要思路:
(1)使用动态规划,对于当前的位置,如果和前一个位置颜色一样,则有dp[i-1]种,则要和更前面一个不一样,有 k-1 种,故总的有 dp[i-1](k-1)种;
(2)如果和更前一个颜色一样,则有 dp[i-2]种,则要和前面一个颜色不一样,则有 (k-1)种,则总的有 dp[i-2](k-1)种;
(3)故对于当前位置有 dp[i]=dp[i-1](k-1)+dp[i-2](k-1);
class Solution {
public:
int numWays(int n, int k) {
//处理特殊的情形
if(n==0){
return