递归:全排列的java实现
2015-08-12 17:27
459 查看
全排列:比如有一组数123,它的全排列有123,132,213,231,321,312。下面的实现也考虑了重复的情况。
import java.util.Scanner; public class Permlist { /** * R={r1,r2,r3...rn} n=1时,perm(R)=(r),其中r是集合R中的唯一元素 * n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3).....(rn)Perm(Rn)组成 */ /* 交换 */ void Swap(int[] list, int a, int b) { int temp = list[a]; list[a] = list[b]; list[b] = temp; } /* 递归排列 */ 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++) { if (Isswap(list, k, i)) { // 去重 Swap(list, k, i); //??? Perm(list, k + 1, m); Swap(list, k, i); //??? } } } } /* 判断重复 */ boolean Isswap(int[] list, int a, int b) { for (int i = a; i < b; i++) if (list[i] == list[b]) return false; return true; } public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("请输入数组的长度"); int l = in.nextInt(); int[] list = new int[l]; for (int i = 0; i < l; i++) { System.out.print("请输入全排列的第" + (i + 1) + "个元素"); list[i] = in.nextInt(); } int k = 0; int m = l - 1; Permlist pl = new Permlist(); pl.Perm(list, k, m); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统