從n個不一樣元素中任取m(m≤n)個元素,按照必定的順序排列起來,叫作從n個不一樣元素中取出m個元素的一個排列。當m=n時全部的排列狀況叫全排列。算法
例如:將 數組 { 1,2,3}進行全排列數組
首先,咱們須要知道當只有一個元素進行全排列的時候,全排列就等於它自己。函數
這個數組的全排列就是須要將 每一個元素放到數組首部,而後將剩下的元素進行全排列,依照此思路咱們能夠用遞歸很快的寫出代碼。spa
若是須要全排列按照字典序輸出的話,只須要將須要全排列的數組先進行排序,而後再求全排列就好。code
可能本人的描述理解起來有點困難,總體思想就是將這個數組裏面的每一個元素都放在第一位一次,將剩下的元素進行全排列,層層遞歸,直至只有一個元素爲止。視頻
這裏推薦一個B站UP主:「正月點燈籠」 。他的算法視頻大多都通俗易懂,在這裏再次感謝!!!blog
package indi.temperature.permutation; /** * @auther : Temperature * @date : 2019/8/31 * @description: */ public class Practice_Perum { public void pringArray(int [] arr,int n){ // 打印數組 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); } public void swap(int [] arr,int i,int j){ // 交換函數 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 對數組arr進行全排列 public void perum(int [] arr,int p,int q ){ // for循環將數組中全部的元素和第一個元素進行交換。而後進行全排列。 // 遞歸結束條件 if(p == q){ // 一次遞歸結束。將整個數組打印出來 pringArray( arr,q+1); } for(int i =p ;i <= q;i++){ swap(arr,i,p); // 把剩下的元素都作全排列。 perum(arr,p+1,q); // 而後再交換回去,數組還原,保證下一次不會有重複交換。 swap(arr,i,p); } } public static void main(String[] args) { int arr[] ={1,2,3}; Practice_Perum practice_perum = new Practice_Perum(); practice_perum.perum(arr,0,arr.length-1); } }