题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1
显然,排列组合的规律是,依次取数组中的数排在第一位,然后将剩下的数字继续排列组合。
有点要利用递归的思想,假设f(list)是求排列组合的函数,num+f(list)代表num与f(list)的结果做笛卡尔乘积,即可num要与f(list)的所有数组都进行一个组合。
例如,f([1,2,3)=(1+f([2,3]))+(2+f([1,3]))+(3+f([1,2]))
那么我们只需要依次取出list的数字,然后求去除了该数字的list'的排列组合即可。
class Solution: def permute(self , num) : # write code here if len(num)==1: return [num] else: res=[] for idx in range(len(num)): cur_numlist=num[:idx]+num[idx+1:] cur_res=self.permute(cur_numlist) cur_num=num[idx] for temp in cur_res: res.append([cur_num]+temp) return res