import java.util.HashSet;
/*
- 搭积木
小明最近喜欢搭数字积木,
一共有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 Test3 {
static HashSet <String> set=new HashSet();
public static void main(String[] args) {
// TODO Auto-generated method stub
paixv("",1);
System.out.println(set.size());
//System.out.println(set);
}
static void paixv(String str,int index )
{
for(int i=0;i<10;i++)
{
if(!str.contains(""+i) )
{
str+=i+"";
if(check(str))
{
if(str.length()==10)
{
if(!set.contains(str))
{
set.add(str);
}
}
paixv(str,index);
}
if(str.length()-index>=0)
{
str=str.substring(0, str.length()-index);
}
if(i==9)index++;
}
}
}
static void inSet(String str)
{
//if(str.length()==10)
//{
if(!set.contains(str))
{
//if(check(str))
//{
set.add(str);
//}
}
str="";
//}
}
static boolean check(String str )
{
switch(str.length())
{
case 1:
return true;
case 2:
if(str.charAt(0)<str.charAt(1))
return true;
break;
case 3:
if(str.charAt(0)<str.charAt(2))
return true;
break;
case 4:
if(str.charAt(1)<str.charAt(3))
return true;
break;
case 5:
if(str.charAt(1)<str.charAt(4))
if(str.charAt(2)<str.charAt(4))
return true;
break;
case 6:
if(str.charAt(2)<str.charAt(5))
return true;
break;
case 7:
if(str.charAt(3)<str.charAt(6))
return true;
break;
case 8:
if(str.charAt(3)<str.charAt(7))
if(str.charAt(4)<str.charAt(7))
return true;
break;
case 9:
if(str.charAt(4)<str.charAt(8))
if(str.charAt(5)<str.charAt(8))
return true;
break;
case 10:
if(str.charAt(5)<str.charAt(9))
return true;
break;
}
return false;
/*
if(str.charAt(0)<str.charAt(1))
if(str.charAt(0)<str.charAt(2))
if(str.charAt(1)<str.charAt(3))
if(str.charAt(1)<str.charAt(4))
if(str.charAt(2)<str.charAt(4))
if(str.charAt(2)<str.charAt(5))
if(str.charAt(3)<str.charAt(6))
if(str.charAt(3)<str.charAt(7))
if(str.charAt(4)<str.charAt(7))
if(str.charAt(4)<str.charAt(8))
if(str.charAt(5)<str.charAt(8))
if(str.charAt(5)<str.charAt(9))
return true;
return false;
*/
}
}