问题
小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
思路
1.用递归求出0-9的全排列
2.对每个排列进行判断,满足条件+1
代码
public class Main3 {
static int count;
public static void main(String[] args) {
int[] arr = {0,1,2,3,4,5,6,7,8,9};
quan(arr,0);
System.out.println(count);
}
//求0-9全排列
public static void quan(int[] arr,int k) {
if(k==arr.length-1) {
test(arr);
return ;
}
for(int i=k;i<arr.length;i++) {
int tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
quan(arr,k+1);
tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
}
}
//检验是否满足条件
public static void test(int[] a) {
if(a[1]<a[0]) return;
if(a[2]<a[0]) return;
if(a[3]<a[1]) return;
if(a[4]<a[1]) return;
if(a[4]<a[2]) return;
if(a[5]<a[2]) return;
if(a[6]<a[3]) return;
if(a[7]<a[3]) return;
if(a[7]<a[4]) return;
if(a[8]<a[4]) return;
if(a[8]<a[5]) return;
if(a[9]<a[5]) return;
count++;
}
}