用递归的方法来求解{1,2,3,4,5}的全排序 下面是我写的java程序 最后输出的时候有问题 10

我希望能够把所有的排序都给保存到list当中可是最后遍历list输出的结果却是1234512345123451234512345......总共也是120个没有错,可是为... 我希望能够把所有的排序都给保存到list当中
可是最后遍历list输出的结果却是
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
......
总共也是120个没有错,可是为什么会都是1 2 3 4 5排序而不是我想要的全排序
这里想了好久没有想通
求高手解答
在此谢过了
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class diGui {
static int n=0;
static List<List<Integer>> list=new LinkedList();
public static void main(String[]args)
{

List<Integer> Arr=new LinkedList();
for(int i=0;i<6;i++)
{
Arr.add(i+1);
}
perm(Arr,0,4);

//遍历list
for(int i=0;i<list.size();i++)
{
List<Integer>temp=list.get(i);
for(int j=0;j<temp.size();j++)
{
System.out.print(temp.get(j)+" ");
}
System.out.println();
}

};

public static void perm(List<Integer>Arr,int begin,int end)
{
//终止条件
if(begin>=end)
{
list.add(Arr);
return ;

}
else
{
for(int i=begin;i<=end;i++)
{
swap(Arr,begin,i);
perm(Arr,begin+1,end);
swap(Arr,begin,i);
}
}
}

//交换k和m的值
public static void swap(List<Integer>Arr,int k,int m)
{
int temp=Arr.get(k);
Arr.set(k, Arr.get(m));
Arr.set(m, temp);
}

}
展开
 我来答
flyingFish211
2012-04-06 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
哥写个递归全排给你参考下
import java.util.ArrayList;
import java.util.List;

public class Permutation {

public static void main(String[] args) {
List<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");

permutation(list, new ArrayList<String>());
}

private static void permutation(List<String> src, List<String> desc) {
if(src.size() == 1){
desc.add(src.get(0));
System.out.println(desc.toString());
}

final int size = desc.size();

for(int i = 0; i < src.size(); i++){
desc.add(src.get(i));

List<String> newSrcList = new ArrayList<String>(src);
newSrcList.remove(i);

permutation(newSrcList, desc);
desc = desc.subList(0, size);
}

}

}
mailyc
2012-04-09 · TA获得超过135个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:131万
展开全部
逻辑是没有错,但是错在这一句:list.add(Arr);
这个拿得是一个list引用,所以后面改变了了list内容,导致不断在变。
可以用拷贝,或者简单的生成数组保存,如下
int[] re = new int[arr.size()];
for(int i = 0; i < re.length; i++)
re[i] = arr.get(i);
list.add(re);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
关浩钊4109
2012-09-30 · TA获得超过1232个赞
知道答主
回答量:152
采纳率:0%
帮助的人:9.4万
展开全部
那你的电脑可能那个内存有问题,叫人把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式