一道算法题,有思路,用的是递归的思想,但是有点问题,希望大家能指正。
有n个大楼,第i个大楼高度为i。每个大楼有不同的颜色,现在问,如何排列这些大楼,使得从左边看能看到L-1次颜色变换?
输入
n,l n代表大楼的数量,l代表颜色的变换
n个数 代表每个大楼的颜色
输入例子
4,3
1,1,2,1
输出
6
个人想法
用递归的思想
建立一个函数compute(ints, i, j , L)
该函数的功能为计算ints数组中,从i到j,并且看到L种颜色的排列个数
那我们可以先计算出i往后一位,并且L种颜色的排列个数,以及i外后一位,L-1种颜色的排列个数,再某种方式类加
public static int compute(int[] ints, int i ,int j, int L){
if(i == j) {
if(L == 1) {
return 1;
}else {
return 0;
}
}else {
int num_1 = compute(ints, i + 1, j, L); //计算出后面那些大楼排成L种颜色的个数
int num_2 = compute(ints, i + 1, j, L - 1); //计算出后面那些大楼排列成L-1种颜色的个数
//不需要再考虑L-2了,因为不可能满足的;

一篇关于腾讯笔试中遇到的算法题,题目涉及排列大楼以达到特定颜色变换次数。博主分享了使用递归思路解决问题的过程,但发现算法存在不足,期待他人指正。

509

被折叠的 条评论
为什么被折叠?



