搭积木

小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最后搭成4层的金字塔形,必须用完所有的积木。 下面是两种合格的搭法: 0 1 2 3 4 5 6 7 8 9 0 3 1 7 5 2 9 8 6 4 请你计算这样的搭法一共有多少种?
public class Main {
    static int count;
    public static void main(String[] args) {
        f("0123456789".toCharArray(), 0);
        System.out.println(count);
    }
    private static boolean g(char[] a) {
        if(a[0] < a[1] && a[0] < a[2] && a[1] < a[3] && a[1] < a[4] && a[2] < a[4] && a[2] < a[5]
                && a[3] < a[6] && a[3] < a[7] && a[4] < a[7] && a[4] < a[8] && a[5] < a[8] && a[5] < a[9])
            return true;
        return false;
    }
    public static void f(char[] a, int step) {
        if(step == a.length - 1) {
            if(g(a)) {
                count ++;
                return;
            }
            else {
                return;
            }
        }
        
        for(int i = step; i < a.length; i ++) {
            {
                char t = a[step];
                a[step] = a[i];
                a[i] = t;
            }
            f(a, step + 1);
            {
                char t = a[step];
                a[step] = a[i];
                a[i] = t;
            }
        }
    }
}
原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8550928.html