Paint Fence(栅栏染色)

http://www.lintcode.com/en/problem/paint-fence/

public class Solution {
    /*
     * @param n: non-negative integer, n posts
     * @param k: non-negative integer, k colors
     * @return: an integer, the total number of ways
     */
    public int numWays(int n, int k) {
        // write your code here
        if (n == 0) {
            return 0;
        }
        //对于第一个节点,和前边相同的情况为0,因为前边没有东西
        int same = 0;
        //和前边不同的情况下k种。
        int diff = k;
        for (int i = 1; i < n; i++) {
//            和前边不同的情况是前边的个数*(k-1)因为前边确定之后,当前只有k-1种情况
            int diff2 = (same + diff) * (k - 1);
//            和前边相同的情况是前边和前边的前边不相等才可以。
            int same2 = diff;
            same = same2;
            diff = diff2;
        }
        return diff + same;
    }
}

你可能感兴趣的:(Paint Fence(栅栏染色))