defperm(arr, stack):ifnot arr:print(stack)# 到树的最后,输出结果
tmp = stack.copy()
res.append(tmp)else:# 没有到树的叶子节点的时候,使用递归继续往下找。for i inrange(len(arr)):
stack.append(arr[i])del arr[i]
perm(arr, stack)
arr.insert(i, stack.pop())
arr =[1,2,3]
stack =[]
res =[]
perm(arr, stack)print(res)defstr_sort(s=''):iflen(s)<=1:return[s]
str_list =[]for i inrange(len(s)):for j in str_sort(s[0:i]+ s[i +1:]):
str_list.append(s[i]+ j)return str_list
str_list = str_sort("123")print(str_list)
组合
import itertools
# itertools.combinations()defcombinations(iterable, r):
pool =tuple(iterable)
n =len(pool)if r > n:return
indices =list(range(r))yieldtuple(pool[i]for i in indices)whileTrue:for i inreversed(range(r)):if indices[i]!= i + n - r:breakelse:return
indices[i]+=1for j inrange(i +1, r):
indices[j]= indices[j -1]+1yieldtuple(pool[i]for i in indices)if __name__ =='__main__':# combinations('ABCD', 2) --> AB AC AD BC BD CD# combinations(range(4), 3) --> 012 013 023 123for i in combinations(range(1,5),2):print(i)
排列def perm(arr, stack): if not arr: print(stack) # 到树的最后,输出结果 tmp = stack.copy() res.append(tmp) else: # 没有到树的叶子节点的时候,使用递归继续往下找。 for i in range(len(arr)):...