看到http://www.blogjava.net/nokiaguy/archive/2008/05/10/199647.html出了一道java算法题,给出一个解法如下:

 1/*摘要: 原题如下:用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。*/
 2class javatest
 3{
 4    public static void main(String[] args)
 5    {
 6        StringBuilder sb=new StringBuilder(6);
 7        sb.append("22");//初始化为两个2,以后的字符都是往空里插,不会重复
 8        int count=0;
 9        for(int i=0;i<sb.length()+1;i++)
10        {
11            sb.insert(i,"1");//插入1
12            for(int j=0;j<sb.length()+1;j++)//注意有lenght()+1个空
13            {
14                sb.insert(j,"3");
15                for(int k=0;k<sb.length()+1;k++)
16                {
17                    sb.insert(k,"4");
18                    for(int m=0;m<sb.length()+1;m++)
19                    {
20                        sb.insert(m,"5");
21                        if(valid(sb))
22                        {
23                            System.out.println(sb);
24                            count++;
25                        }

26                        sb.deleteCharAt(m);
27                    }

28                    sb.deleteCharAt(k);
29                }

30                sb.deleteCharAt(j);
31            }

32            sb.deleteCharAt(i);//删除当前位置,等下一个位置插入
33        }

34        System.out.println(count);
35    }

36    static boolean valid(StringBuilder sb)
37    {
38        if(sb.charAt(2)=='4'||sb.indexOf("35")>=0||sb.indexOf("53")>=0)
39            return false;
40        return true;
41    }

42    
43}

44
posted on 2009-07-27 20:02 lanxiazhi 阅读(366) 评论(0)  编辑  收藏 所属分类: 算法

只有注册用户登录后才能发表评论。


网站导航: