276. Paint Fence
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// Dynamic Programming
int numWays(int n, int k) { // time: O(n); space: O(n)
if (n == 0) return 0;
if (n == 1) return k;
vector<int> same(n, 0); // total # of ways when ith post has the same color as the i-1 th post
vector<int> diff(n, 0); // total # of ways when ith post has the different color as the i-1 th post
same[0] = same[1] = k;
diff[0] = k;
diff[1] = k * (k - 1);
for (int i = 2; i < n; ++i) {
same[i] = diff[i - 1];
diff[i] = (k - 1) * same[i - 1] + (k - 1) * diff[i - 1];
}
return same.back() + diff.back();
}Last updated