3.28
这个题自己的错误,废了很多时间。
如果是单纯地相邻不许同色的话,应该就是这样的
public static int numWays1(int n, int k) {
if( n ==1){
return k;// Write your code here
}
if(k == 1 && n > 2){
return 0;
}
int x = (int)Math.pow(k-1, n-1);
return x*k+2*(n-1);
}
如果是不允许三根柱子相邻的话应该是这样的
public static int numWays(int n, int k) {
if( n < 0 && k < 0){
return 0;// Write your code here
}
if( n ==1){
return k;// Write your code here
}
if(k == 1 && n > 2){
return 0;
}
if( n ==2){
return k*k;
}
// 我以为用这种递归的方法会超时呢
// 其实并没有呢,哈哈
int x = numWays(n-1, k);
int y = numWays(n-2, k);
return (x+y)*(k-1);
/***
这种非递归的方法应该是会更好一些的
int n2 = k * k;
for (int i = 2; i < n; i++) {
int temp = n1 * (k-1) + n2 * (k - 1);
n1 = n2;
n2 = temp;
}
return n2;
*/
}