一道算法题,有思路,用的是递归的思想,但是有点问题,希望大家能指正。
有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); //