276. Paint Fence

来源:互联网 发布:js 浮点数计算 编辑:程序博客网 时间:2024/06/06 17:33

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.

注意注意!这里是no more than two adjacent fence posts have the same color,连续涂同一种颜色不超过两个,也就是说可以相邻的两个涂同一种颜色,第三个就不能涂同一种颜色了。所以,定义4个变量,currdiff(当前的涂不同颜色),currsame(当前的涂相同颜色),prediff(之前一个涂不同颜色),presame(之前一个涂相同颜色)。动起来的步骤是:

1、prediff = currdiff,presame = cursame

2、currdiff = (prediff + presame)* (k - 1)

3、currsame = prediff

代码实现如下:

public class Solution {    public int numWays(int n, int k) {        if (n == 0 || k == 0) {            return 0;        }        if (n == 1) {            return k;        }        int currsame = k;        int currdiff = k * (k - 1);        for (int i = 2; i < n; i ++) {            int prediff = currdiff;            int presame = currsame;            currdiff = (prediff + presame) * (k - 1);            currsame = prediff;        }        return currdiff + currsame;    }}

0 0
原创粉丝点击