递归实现打印一个数组的所有排列
来源:互联网 发布:mysql 监控 编辑:程序博客网 时间:2024/06/01 23:11
代码(数组列表实现):
import java.util.ArrayList;import java.util.List;public class tmp {public static void main(String[] args) {List<Integer> s = new ArrayList<>();//数组列表方便数组大小变动。List<Integer> sr = new ArrayList<>();for (int i = 1; i < 4; i++) {s.add(i);}p(s, sr);}public static void p(List<Integer> s,List<Integer> sr){if(s.size()==1){//递归结束条件sr.add(s.get(0));System.out.println(sr.toString());sr.remove(sr.size()-1);}else{for(int i = 0 ; i < s.size(); i++){sr.add(s.get(i));List<Integer> tmp = new ArrayList<>();//tmp是整个输入序列,依次从其中剔除元素,形成新的列表for(Integer it:s)tmp.add(it);tmp.remove(i);p(tmp, sr);//递归sr.remove(sr.size()-1);//递归结束,把添加进入的序列元素剔除,换for循环中其他元素}}}}
(linklist实现):
import java.util.LinkedList; import java.util.List; public class Qpl { public static void main(String[] args) { // TODO 自动生成的方法存根 List<String> data = new LinkedList<String>(); data.add("1"); data.add("2"); data.add("3"); data.add("4"); List<List<String>> result = pl(data); for(int i=0;i<result.size();i++){ System.out.println(result.get(i)); } } /** * 得到全排列的方法 * @param data 存放要排列的各个元素 * @return List<List<String>> 结果中的每一个List就是一种可能的排列 */ public static List<List<String>> pl(List<String> data){ if(data.size()==1){ // 如果data中只有一个元素,那么直接得到它的全排列 List<List<String>> result= new LinkedList<List<String>>(); List<String> p = new LinkedList<>(); p.add(data.get(0)); result.add(p); return result; }else{ // 否则,去除第一个元素,然后得到剩下的 n-1 个元素的全排列,第一个元素插入到每一种排列中的相应位置上就可以得到所有元素的全排列了 // 也就是说, n-1 个元素的全排列中的每一种排列又可以衍生出 n 种排列 String first = data.get(0); List<String> remainList = data.subList(1, data.size()); List<List<String>> remainPl = pl(remainList); List<List<String>> result= new LinkedList<List<String>>(); for(int i=0;i<remainPl.size();i++){ List<String> thisOne = remainPl.get(i); for(int j=0;j<=thisOne.size();j++){ List<String> copyOne = new LinkedList<>(thisOne); copyOne.add(j,first); result.add(copyOne); } } return result; } } }
0 0
- 递归实现打印一个数组的所有排列
- 一个打印输入字符串所有排列的递归程序
- 递归输出char数组的所有排列
- 打印一个字符串的所有排列。
- 【递归】输出一个字符串的所有排列
- 打印给定一个数组序列的所有的排列的类n皇后问题
- 排列组合-打印出一个数组的元素的所有排列方式-算法
- 递归,非递归生成数组的所有排列
- 打印一个数组的全排列
- 使用递归的方法生成一个序列的所有排列
- 传入一个数组,输出这个数组里面的所有排列
- 递归实现n个不同字符的所有全排列
- 递归实现数组全排列
- 数组全排列递归实现
- 打印出一个字符串的所有组合的递归方式
- 定义一个数组,编程打印它的全排列
- 定义一个数组,编程打印它的全排列
- 定义一个数组,编程打印它的全排列。
- QEMU KVM libvirt手册(4) – images
- 面试心得与总结---BAT、网易、蘑菇街
- day29Struts 类型转换和自定义类型转换,input视图
- Linux内存管理(上)
- struts1源码阅读看java反射
- 递归实现打印一个数组的所有排列
- Ubuntu系统搭建以太坊开发平台过程
- RTSP/RTP的有效负载类型
- ComboBox下拉列表控件链接数据库
- 【Consul】Consul实践指导-Agent
- HTML5 手势检测原理和实现
- Linux内存管理(下)
- QEMU KVM Libvirt手册(5) – snapshots
- WEB性能权威指南学习笔记 Item01