一道递归思想的排列组合题目

来源:互联网 发布:淘宝店铺横幅尺寸 编辑:程序博客网 时间:2024/05/20 09:47

题目原题:任意数字序列“12345678”之类,输出它们所有的排列组合

这道题目对于学习递归还是挺不错的,可以借鉴一下
要注意的是:

public Object remove()
作用是移除LinkedList对象的第一个元素..
返回的是被移除的那个元素.

public Object remove(int index);
作用是移除LinkedList对象中索引号为index的元素..
返回的是被移除的那个元素.

public boolean remove(Object o)
作用是移除LinkedList对象中值为o的元素..
移除成功返回true,否则返回false

也就是说在代码中的tmp.remove(i)),其用意是删除tem[i]的同时并获取到它的值
且因为list是有顺序的,所以在删除对象之后,排在其后的对象下标都减1,保持了序列的连贯。
除了主方法比较难理解一点,其余的代码应该都不难,多看几遍就懂了。
代码如下:

import java.util.Arrays;import java.util.LinkedList;import java.util.List;public class Test {    //待排列的字符串。    static String toBeArranged ="12345678";                    //将其转换成字符数组。    static String[] array =stringToStringArray(toBeArranged);    //字符串长度。    static int length=array.length;           //存放数组时计数。                 static int k=0;       //result是存储计算结果的数组,其大小为length的阶乘。                             static String[] result=new String[total(length)];            //主函数,调用方法并输出结果    public static void main(String[] args)      {      //调用主要方法      listAll(Arrays.asList(array), "");      //输出      System.out.println(Arrays.toString(result));            }    //主要的计算方法。    public static void listAll(List candidate, String prefix)     {      if(prefix.length()==length)                //小于字符串长度的组合忽略。      {          result[k++]=prefix;                //存放数组里。      }      for(int i=0;i<candidate.size();i++)             {          List tmp = new LinkedList(candidate);          {              listAll(tmp, prefix + tmp.remove(i));    //函数中的参数从右边开始解析          }      }    }    //将字符串转成数组。    static String[] stringToStringArray(String s)    {      int length=s.length();      if(length<=0)      {          return new String[0];      }      String[] result=new String[length];      for(int i=0;i<length;i++)      {          result[i]=""+s.charAt(i);      }      return result;    }    //计算number阶乘,为结果数组的容量。    static int total(int number)           {      int number1=1;      for(int i=1;i<=number;i++)      {          number1*=i;      }      return number1;    }       }
1 0