swift演算法 全排列

2021-09-24 09:08:50 字數 1190 閱讀 6100

1、描述

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列

例:輸入:[1, 2, 3]

輸出:[

[1, 2, 3] ,

[1, 3, 2] ,

[2, 1, 3] ,

[2, 3, 1] ,

[3, 1, 2] ,

[3, 2, 1]

2、演算法

利用回溯法探索求排列

什麼是回溯法?

答:回溯法是一種通過探索所有可能的候選解來找出所有的解的演算法,如果候選解被確認 不是 乙個解(或 至少不是 最後乙個 解),回溯演算法回通過上一步進行一些變化拋棄該解,即 回溯,並再次嘗試。

回溯步驟:

1)使用第乙個整數的索引作為引數 first

2)如果第乙個整數索引 等於 n,意味著當前排列已完成

3)遍歷索引 first ~n-1的整數

(1)在排列中放置第i個整數,即交換nums 的first 和 i 下標對應的整數

(2)繼續生成從第i 個整數開始的所有排列 即遞迴 first+1

(3)現在回溯 幾還原(1)中交換的整數

}//將生成的排列加入陣列

private func addarr(_ output : inout [[int]], _ nums : [int])

呼叫:print(algorithm.permute([1, 2, 3]))

執行結果:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

演算法 全排列

從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。用演算法分別實現全排列,其中n個元素儲存在乙個長度為n的陣列中。實現全排列之前,先看一下對進行全排列的一種方法 從圖中可以看出,我們首先從n個元素中取出乙個元...

全排列演算法

1.遞迴全排列 分別將每個位置交換到最前面位,之後全排列剩下的位。遞迴全排列 1 2 3 4 5 1,for迴圈將每個位置的資料交換到第一位 swap 1,1 5 2,按相同的方式全排列剩餘的位 2.字典序全排列演算法 對給定的字符集中的字元規定了乙個先後關係,在此基礎上規定兩個全排列的先後是從左到...

全排列演算法

1.遞迴生成1 n的全排列 示例程式 include using namespacestd void print intn,int a,int cur int main int num while cin num int a 30 print num,a,0 return 0 void print ...