题目描述:
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.
Note:
n and k are non-negative integers.
Example:
Input: n = 3, k = 2 Output: 6 Explanation: Take c1 as color 1, c2 as color 2. All possible ways are: post1 post2 post3 ----- ----- ----- ----- 1 c1 c1 c2 2 c1 c2 c1 3 c1 c2 c2 4 c2 c1 c1 5 c2 c1 c2 6 c2 c2 c1
class Solution {
public:
int numWays(int n, int k) {
if(n==0) return 0;
int same=0, diff=k, total=k; // 表示对于当前位置和上一个位置颜色相同,不同和总共的可能性
for (int i=2;i<=n;i++)
{
same=diff; // i和i-1的颜色相同,那么i-1和i-2的颜色必须不同
diff=total*(k-1); // i和i-1的颜色不同,那么i-1和i-2的颜色可以相同或不同
total=same+diff;
}
return total;
}
};