解释一下这段代码

sarahiyou 2010-02-09 12:41:17
题目:把一个数组里的数组合全部列出,比如1 2 列出来为1 2 12 21

import 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又是什么意思呢
请求这两个问题的解答,谢谢了(声明:这段代码可以运行出结果,没有问题)
...全文
298 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
bayougeng 2010-02-22
  • 打赏
  • 举报
回复
就是递归啊。
prefix是前缀,实际上就是把已经组合的数组元素做成一个String,然后传给下一个调用。
豌豆SAMA 2010-02-22
  • 打赏
  • 举报
回复
引用 10 楼 fatroach 的回复:
prefix就是每次递归的前缀,每层递归从list中依次取出一个元素添加到prefix之后,然后删除该元素,修改prefix,传递给下一层递归。

原来如此!
zhuyouyong 2010-02-21
  • 打赏
  • 举报
回复
引用 1 楼 dracularking 的回复:
递归remove 并同频率地打印叠加所去除的字符的串
whoamiwangwb 2010-02-20
  • 打赏
  • 举报
回复
主要意思是 从一个数组中 每次取一个数 当头,然后让后面的数依次排列出去。
就想我们刚学编程的时候常用的那个遍历算法
for(i =0;i<n ;i++)
for(j=0;j<n;j++)
System。out.println(i+""+j);

道理差不多

算法更逻辑一些 ,最后可以不用替重

fang00y 2010-02-20
  • 打赏
  • 举报
回复
引用 11 楼 whoamiwangwb 的回复:
主要意思是 从一个数组中 每次取一个数 当头,然后让后面的数依次排列出去。
就想我们刚学编程的时候常用的那个遍历算法
for(i =0;i <n ;i++)
  for(j=0;j <n;j++)
System。out.println(i+""+j);

道理差不多

算法更逻辑一些 ,最后可以不用替重


看不懂~
梦_枫 2010-02-20
  • 打赏
  • 举报
回复
引用 1 楼 dracularking 的回复:
递归remove 并同频率地打印叠加所去除的字符的串


UPUP
fatRoach 2010-02-19
  • 打赏
  • 举报
回复
prefix就是每次递归的前缀,每层递归从list中依次取出一个元素添加到prefix之后,然后删除该元素,修改prefix,传递给下一层递归。
angelbo731 2010-02-19
  • 打赏
  • 举报
回复
只能看出是递归~~~~
huosidun0302 2010-02-19
  • 打赏
  • 举报
回复
就是一个递归.不过还没搞清楚这个递归的用途
zhouq528 2010-02-19
  • 打赏
  • 举报
回复
楼主的问题我也不会!!
b1412 2010-02-17
  • 打赏
  • 举报
回复
mark一下学习学习。。
w3329307 2010-02-09
  • 打赏
  • 举报
回复
UP
JF......
SambaGao 2010-02-09
  • 打赏
  • 举报
回复
引用 1 楼 dracularking 的回复:
递归remove 并同频率地打印叠加所去除的字符的串



...
liu4545533 2010-02-09
  • 打赏
  • 举报
回复
就是一个递归算法而已,好好看那看吧
bobo364 2010-02-09
  • 打赏
  • 举报
回复
/*
* 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);
}

}
dracularking 2010-02-09
  • 打赏
  • 举报
回复
递归remove 并同频率地打印叠加所去除的字符的串

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧