题目描述:
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;
}
};
本文探讨了一种独特的算法问题,即如何为一系列围栏柱涂色,确保相邻柱子的颜色不超过两种相同,同时提供了高效的解决方案。通过动态规划的方法,文章详细解释了如何计算所有可能的涂色方案数量。
584

被折叠的 条评论
为什么被折叠?



