遞迴解決全排列問題
排列:從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列;
全排列:當n==m時,稱為全排列;假設:集合{ 1,2,3}的全排列為:
{ 1 2 3}
{ 1 3 2 }
{ 2 1 3 }
{ 2 3 1 }
{ 3 2 1 }
{ 3 1 2 }
我們可以將這個排列問題畫成圖形表示,即排列列舉樹,比如下圖為{1,2,3}的排列列舉樹,此樹和我們這裡介紹的演算法完全一致;
演算法思路:
(1)n個元素的全排列=(n-1個元素的全排列)+(另一個元素作為字首);
(2)出口:如果只有一個元素的全排列,則說明已經排完,則輸出陣列;
(3)不斷將每個元素放作第一個元素,然後將這個元素作為字首,並將其餘元素繼續全排列,等到出口,出口出去後還需要還原陣列;
package test;
public class Perm {
public static void perm(Object[] 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++){
list = MyMath.swap(list,k,i); //for迴圈將陣列從頭到尾的每一個數一次放到最前面
perm(list,k+1,m); //確定第一個元素,開始遞迴k+1到結束的數
list = MyMath.swap(list, k, i); //還原換過的數
}
}
}
public static void main(String[] args) {
Object[] list = {1,2,3};
perm(list, 0, 2);
}
}
package test;
public class MyMath {
//調換list中k和i下表元素的值
public static Object[] swap(Object[] list, int k, int i) {
// TODO Auto-generated method stub
Object temp = list[k];
list[k]=list[i];
list[i]=temp;
return list;
}
}
相關文章
- 遞迴-*全排列問題遞迴
- 回溯法解決全排列問題總結
- 全排列的實現之遞迴版與迭代版遞迴
- 遞迴問題遞迴
- Java解決遞迴造成的堆疊溢位問題Java遞迴
- 以Top-Down思維去解決問題——遞迴遞迴
- js陣列全排列問題JS陣列
- 全排列價值(數學問題)
- 回溯法(排列樹)解決八(N)皇后問題
- 遞迴路徑問題遞迴
- python3:遞迴解漢諾塔問題Python遞迴
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- hdu2048遞迴問題遞迴
- hdu2049遞迴問題遞迴
- 樹遞迴問題的求解遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 遞迴求解漢諾塔問題遞迴
- 排列 題解
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- 遞迴演算法實踐---實現排列組合遞迴演算法
- 微信小程式支付全問題解決微信小程式
- 藍橋杯全排列專題
- 解決CORS跨域不能傳遞cookies的問題CORS跨域Cookie
- 第七章 遞迴、DFS、剪枝、回溯等問題 ------------- 7.3 題解:機器人走方格問題遞迴機器人
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- 03_利用pytorch解決線性迴歸問題PyTorch
- 字串排列組合問題字串
- ch2_8_3求解迴文序列問題(遞迴實現)遞迴
- 遞迴示例-指定數字以內的所有排列組合(Reduce)遞迴
- 字串全排列字串
- 請教一個切片遞迴賦值的問題遞迴賦值
- ?30 秒瞭解尾遞迴和尾遞迴優化遞迴優化
- 遞迴中的遞推與迴歸以及返回值和函式儲存的問題(以階乘問題進行討論)遞迴函式
- 運維必備-解決鎖問題的全過程運維
- 怎麼解決引用計數 GC 的迴圈引用問題?GC
- 將函式作為引數傳遞解決非同步問題函式非同步
- 回溯問題Python框架總結——排列組合問題Python框架
- c++迷宮問題回溯法遞迴演算法C++遞迴演算法