java递归全排列思路_Java基于递归解决全排列问题算法示例

本文实例讲述了Java基于递归解决全排列问题算法。分享给大家供大家参考,具体如下:

排列问题

设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳如下:

当n=1时,Perm(R)=(r),其中r是集合中唯一的元素;

当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3)。。。。(rn)Perm(Rn)构成。

public class AllSort {

public static void perm(int[] list, int k, int m) {

if( k == m) {

for (int i = 0; i <=m; i++) {

System.out.print(list[i]);

}

System.out.println();

}

else{

for(int i = k; i <= m; i++) {

swap(list,k,i);

perm(list, k+1 , m);

swap(list,k,i);

}

}

}

public static void swap(int[] list, int a, int b) {

int temp;

temp = list[a];

list[a] = list[b];

list[b] = temp;

}

public static void main(String args[]) {

int[] list = new int[5];

for(int i = 0; i < list.length; i++) {

list[i] = i+1;

}

perm(list,0,list.length-1);

}

}

运行结果:

12345

12354

12435

12453

12543

12534

13245

13254

13425

13452

13542

13524

14325

14352

14235

14253

14523

14532

15342

15324

15432

15423

15243

15234

21345

21354

21435

21453

21543

21534

23145

23154

23415

23451

23541

23514

24315

24351

24135

24153

24513

24531

25341

25314

25431

25413

25143

25134

32145

32154

32415

32451

32541

32514

31245

31254

31425

31452

31542

31524

34125

34152

34215

34251

34521

34512

35142

35124

35412

35421

35241

35214

42315

42351

42135

42153

42513

42531

43215

43251

43125

43152

43512

43521

41325

41352

41235

41253

41523

41532

45312

45321

45132

45123

45213

45231

52341

52314

52431

52413

52143

52134

53241

53214

53421

53412

53142

53124

54321

54312

54231

54213

54123

54132

51342

51324

51432

51423

51243

51234

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值