leetcode 算法题276 (简单074) 栅栏涂色
- 题目介绍
有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,
每个栅栏柱可以用其中一种颜色进行上色。
你需要给所有栅栏柱上色,
并且保证其中相邻的栅栏柱 最多连续两个 颜色相同。
然后,返回所有有效涂色的方案数。
- 示例
输入: n = 3,k = 2
输出: 6
解析: 用 c1 表示颜色 1,c2 表示颜色 2,所有可能的涂色方案有:柱 1 柱 2 柱 3 ----- ----- ----- ----- 1 c1 c1 c2 2 c1 c2 c1 3 c1 c2 c2 4 c2 c1 c1 5 c2 c1 c2 6 c2 c2 c1
- 解法一
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var numWays = function(n, k) {
if(n === 0) {
return 0;
}
if(n === 1) {
return k;
}
if(n === 2) {
return k * k;
}
return (numWays(n - 1, k) + numWays(n - 2, k)) * (k - 1);
};
执行用时 : 5424 ms, 在所有 JavaScript 提交中击败了5.26%的用户
内存消耗 : 34.1 MB, 在所有 JavaScript 提交中击败了100.00%的用户
- 解法二
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var numWays = function(n, k) {
let dict = [0, k, k * k];
while(n > 2) {
dict[0] = dict[1];
dict[1] = dict[2];
dict[2] = (dict[0] + dict[1]) * (k - 1)
n--;
}
return dict[n];
};
执行用时 : 52 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗 : 33.6 MB, 在所有 JavaScript 提交中击败了100.00%的用户