算法实现-->全排列问题
2015-03-15 10:56
323 查看
import java.util.ArrayList; import java.util.List; /* * 全排列算法 * 2013-13-29 * By YananLee * 算法思想:利用递归思想对数组进行操作 */ public class FullPerm { /* *lst 要进行全排列的数组 *r 表示数组中第r之前的已经排好序,初始时为0,即所有位置都未确定 *length 表示lst中未排好序的长度 *算法思想:如果length=1 则已排好一次,输出数组 * 否则就确定从第0位置开始确定数据 * */ static void perm(ArrayList<String> lst,int r,int length) { if (length==1) { for (int i=0;i<lst.size();i++) { System.out.print(""+lst.get(i)); } System.out.println(""); } else { for(int i=r;i<lst.size();i++) { // ArrayList<String>lstTmp=lst; // lstTmp.remove(i); /* String tmp=lst.get(r); lst.set(i, tmp); lst.set(r,lst.get(i)); */ swap(lst,r,i);//每次交换两个 perm(lst,r+1,length-1);//递归的调用 swap(lst,r,i);//还原数组 ,主要针对上上一步中的交换 // perm(lstTmp,i,length-1); //System.out.println(" "); } } } static void swap(ArrayList<String> lst,int i,int j) { //交换函数 String tmp=lst.get(j); lst.set(j,lst.get(i)); lst.set(i, tmp); } public static void printArr(ArrayList lst) { //对数组的输出函数 System.out.println("输出数组:" ); for(int i=0;i<lst.size();i++) { System.out.print(""+lst.get(i)); } } public static void main(String args[]) { ArrayList<String> lst =new ArrayList(); lst.add("a");lst.add("b");lst.add("c");lst.add("d"); //printArr(lst); perm(lst,0,5); } }
相关文章推荐
- List<> 转换为Dataset的C#代码实现 解决Nullable问题
- 数字问题之二进制1数问题<Java实现>
- 经典算法问题的java实现<一>
- 算法实现-->最长公共子串
- <数据结构与算法分析 C++描述>算法分析之最大子序列和问题
- 最短路径实现代码-->Dijkstra求解最短路径问题
- 算法导论-->约瑟夫问题
- 逻辑回归(LR)算法java实现<转>
- 分类算法--贝叶斯分类法(Maprdecue实现)代码实现<转>
- 256 <--> 64算法 互转 ( Java实现)
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- 经典算法问题的java实现<二>
- 链表问题之链表反转<Java实现>
- 算法设计--蛮力法&&分治法求最近对问题(C++实现)
- 数字问题之斐波那契数列全解<Java实现>
- 链表问题之无头单链表删节点<Java实现>
- 数组问题之数组最值问题<Java实现>
- 字符串问题之串移包含问题<Java实现>
- 算法实现题&nbsp;汽车加油问题.
- 算法->完全背包问题 UVa 674 Coin Change