大疆笔试题目:长度为n的方格,刷3种颜色,相邻方格颜色不同,首尾颜色不同,共多少种涂色方式

题目描述:

长度为n的方格,刷3种颜色的颜料,相邻的方格颜料颜色不能相同,且首尾方格颜色不能相同。每个方格必须涂色。计算一共有多少种涂色方式。


题目分析:

当n==1时,共3种方案,即A1 = 3;

当n==2时,有6种方案(A(3, 2) = 6),即A2 = 6;

当n==3时,有6种方案(A(3, 3) = 6),即A3 = 6;

An = 2×A(n-2) + A(n-1),n >= 4


证明:

考虑第n-1个格子:

1、如果这个格子和第1个格子颜色不同,那么第n个格子只有1种选择,前n-1个格子的选择就是A(n-1),此时n个格子的选择是1×A(n-1);

2、如果这个格子和第1个格子颜色相同,那么第n个格子只有2种选择,前n-2个格子的选择就是A(n-2),此时n个格子的选择是2×A(n-2)。

所以,A(n) = 2×A(n-2) + A(n-1),n >= 4。

这里需要注意的是,因为我们是考虑第n-1个格子,该格子和第1个格子的颜色可能相同也可能不同,所以n >= 4才可以。不然n = 3的话,第n-1 = 3-1 = 2个格子和第一个格子的颜色必然不同,就没有上面这2种情况了,所以要从n >= 4开始推导。

public class ColorQuestion {
	public long getSolutionNums(int n) {
		long[] nums = new long[51];
		nums[0] = 3;
		nums[1] = 6;//A(3,2)
		nums[2] = 6;//A(3,3)
		for(int i = 3; i < n; i++) {//for n=i, condition on (i-1)th color
			nums[i] = nums[i-1] + 2*nums[i-2];
		}
		return nums[n-1];
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值