还是拿背包问题来分析吧,假设有N个背包,现在我们要对这个N个背包排列。。输出所有情况
那么有:
背包 | 1 | 2 | 3 | ... | n |
(n个背包选一个!) | (n-1个背包选一个!) | (n-2个背包选一个!) | ... | (只剩下一个背包啦!凑合用着吧!) |
生动点形容整个场景,存在N个人
第一步,在这N个人中找一个人轮流坐在第一个位置上
第二步,在这N-1个人中找一个人轮流坐在第一个位置上 第一个位置已经固定人了
第三步,在这N-2个人中找一个人轮流坐在第一个位置上 第一/二个位置已经固定人了
第四步,在这N-3个人中找一个人轮流坐在第一个位置上 第一/二/三个位置已经固定人了
。。。。
#!/usr/bin/env python # coding=utf-8 # 排列树 def perm(arr, k): arrLen = len(arr) if arrLen == k: print arr return # [0, k) 区间都是确定好的元素,不能再搞他们的位置了。。。。 for index in range(k, arrLen): # 第k层考虑下用arr数组的index 号元素? temp = arr[index] arr[index] = arr[k] arr[k] = temp perm(arr, k + 1) # 第k层考虑下不再用arr数组的index 号元素了 temp = arr[index] arr[index] = arr[k] arr[k] = temp arr = [1, 2, 3] num = 0 perm(arr, num)