题解 | #没有重复项数字的全排列#

没有重复项数字的全排列

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


全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务