全排列算法

简介:
 给出问题:
 假如给出一个字符数组 a,b,c请设计算法列出由a,b,c所有排列的通用算法。
如给出的是 a,b,c 则全排列为:
abc
bac
bca
cba
cab
acb
这个问题看似简单,但是真做起来也不是那么的容易,解决的算法很多,这里给出一种较为简单的算法,复杂度为O(n2):
package com.xhinker;
public class FullArray {
 public String[] s={"a","b","c"};
 public void run(){  
  int j2;                              //指向要对换的位置
  int sLength=s.length;
  for(int i=0;i<getP(s.length);i++){  //外层循环以便获取全部组合
   String[] tempString=s.clone();   //由于对象传的是句柄也就是地址,因此为保证原来数组不变,必须使用对象克隆
   for(int j=0;j<i;j++){           //i次的对换
    j2=j%(sLength-1);
    change(j2,tempString);
   }
   for(int l=0;l<sLength;l++){     //输出这一次对换后的排列
    System.out.print(tempString[l]);
   }
   System.out.println();
  }
 }
 public int getP(int i){                //获得全排列数all
  int all=1;
  for(int j=i;j>0;j--){
   all=all*j;
  }
  return all;
 }
 public void change(int i,String[] tempString){//
  String t="";
  t=tempString[i];
  tempString[i]=tempString[i+1];
  tempString[i+1]=t;
 }
 public static void main(String[] args){
  FullArray fa=new FullArray();
  fa.run();
 }
}
允许使用和任意转载,但请注明出处和算法的作者。



本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/131949,如需转载请自行联系原作者
目录
相关文章
|
算法 C++ 索引
【算法】——全排列算法讲解
【算法】——全排列算法讲解
623 0
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
258 0
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
存储 机器学习/深度学习 算法
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
|
算法 Java
算法-----全排列
算法-----全排列
|
算法
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
111 0
|
机器学习/深度学习 存储 算法
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II
|
自然语言处理 算法
经典算法之——解决全排列问题以及详解
经典算法之——解决全排列问题以及详解
368 0
|
机器学习/深度学习 算法 Python
Python|“套娃”算法-递归算法解决全排列
Python|“套娃”算法-递归算法解决全排列
232 0

热门文章

最新文章