显然,排列组合的规律是,依次取数组中的数排在第一位,然后将剩下的数字继续排列组合。
有点要利用递归的思想,假设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