题目:把一个数组里的数组合全部列出,比如1  2 列出来为1  2  12  21import java.util.Arrays;
import java.util.*;public class Java9_1 { /**
  * @param args
  */
 public static void main(String[] args) {
  String[] num = {"1","2","3"};
  listAll(Arrays.asList(num),"");//1
 }
 public static void listAll(List candidate,String prefix) {
  for (int i = 0; i < candidate.size(); i++) {
   List list = new ArrayList(candidate);
   listAll(list,prefix+list.remove(i)); //2
  }
  System.out.println(prefix);
 }}上述代码谁能给我解释一下,变量prefix代表什么,
1部分代码listAll方法是调用了下面的静态方法,那么2部分的代码中listAll又是什么意思呢
请求这两个问题的解答,谢谢了(声明:这段代码可以运行出结果,没有问题)

解决方案 »

  1.   

    递归remove 并同频率地打印叠加所去除的字符的串
      

  2.   

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */package exp1;/**
     *
     * @author szhu5
     */
    import java.util.Arrays;
    import java.util.*;public class Java9_1
    {
        public static void main(String[] args)
        {
            String[] num = {"1","2","3"};
            listAll(Arrays.asList(num),"");//Arrays.asList(num)返回一个受指定数组支持的固定大小的列表,然后在作为参数传入ListAll
        }
        public static void listAll(List candidate,String prefix)
        {
            for (int i = 0; i < candidate.size(); i++)
                {
                    List list = new ArrayList(candidate);
                    listAll(list,prefix+list.remove(i)); //list.remove(i)移除此列表中首次出现的指定元素(如果存在),此句也就是说递归调用listall,每次prefix都少上一此的第i个元素
                }
            System.out.println(prefix);
        }}
      

  3.   

    prefix就是每次递归的前缀,每层递归从list中依次取出一个元素添加到prefix之后,然后删除该元素,修改prefix,传递给下一层递归。
      

  4.   

    主要意思是 从一个数组中 每次取一个数 当头,然后让后面的数依次排列出去。
    就想我们刚学编程的时候常用的那个遍历算法
    for(i =0;i<n ;i++)
      for(j=0;j<n;j++)
    System。out.println(i+""+j);道理差不多算法更逻辑一些 ,最后可以不用替重
      

  5.   

    就是递归啊。
    prefix是前缀,实际上就是把已经组合的数组元素做成一个String,然后传给下一个调用。