"""全排列 用遞迴方法
全排列:
1、列表只有乙個元素[a],它的全排列只有a。
2、列表有兩個元素[a, b],它的全排列為[a, b], [b, a]:
3、列表有三個元素[a, b, c]
交換ab,[b, a, c] 對ac進行全排列
4、列表有n個元素,將第乙個元素固定,對剩下n - 1個元素進行全排列。
將第乙個元素依此與其他元素交換,對每次交換後剩下的n-1個元素進行全排列。
5、對剩下的n - 1個元素全排列,同上,固定後對n - 2排列。
6、直到陣列數量為1,全排列就是它自己,完成一次排列。
j = begin
for i in range(begin, end): # 對begin到end的陣列進行i次交換。
data[i], data[j] = data[j], data[i] # 交換。
perm(data, begin + 1, end) # 交換後對剩下陣列進行全排列。[begin + 1, end]
data[i], data[j] = data[j], data[i] # 全排列完成後,換回原來的順序,回到for進行下一次交換。"""
def perm(data, begin, end):
if begin == end: # 遞迴結束條件,當交換到最後乙個元素的時候不需要交換,1的全排列還是1。
print(data) # 列印一次排列完成後的陣列。
else:
j = begin
for i in range(begin, end): # 從begin到end全排列。
data[i], data[j] = data[j], data[i]
perm(data, begin + 1, end)
data[i], data[j] = data[j], data[i] # 遞迴完成後,交換回原來的位置。
arr = [1, 2, 3, 4, 5]
perm(arr, 0, len(arr))
集合的全排列問題
集合的全排列問題,其實 實現很簡單,但是發現剛開始理解 起來是有點困難的 下面是我對 程式的思路理解 首先要注意的是,這裡採用遞迴的思想來解決全排列問題,這就要求對遞迴要有一定的理解,在下面的 中可以看到,有一段 需要解釋 可以看到這裡有兩個swap函式 第乙個swap函式用來固定當前要取的數的位置...
計算集合裡全排列
public static void main string args class solution int len arr.length 定義狀態變數 boolean used newboolean len 狀態變數 標識對應陣列的元素在遞迴遍歷的時候是否使用 預設都是false list pat...
python實現全排列
有1,2,3,4這4個數字,能組成多少個互不相同且無重複數字的三位數,下面是二種解決示例,需要的朋友可以參考下 第一種方法 遞迴 複製 如下 def perms elements if len elements 1 yield elements else for perm in perms elem...