其他分享
首页 > 其他分享> > 15. 全排列

15. 全排列

作者:互联网

15. 全排列

中文English

给定一个数字列表,返回其所有可能的排列。

样例

样例 1:

输入:[1]
输出:
[
  [1]
]

样例 2:

输入:[1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

挑战

使用递归和非递归分别解决。

注意事项

你可以假设没有重复数字。

输入测试数据 (每行一个参数)如何理解测试数据?

 DFS写法(for循环内嵌dfs)

class Solution:
    """
    @param: nums: A list of integers.
    @return: A list of permutations.
    """
    def permute(self, nums):
        # write your code here
        
        #递归版本
        results = []
        self.dfs(results, [], nums)
        return results 
        
        
    #递归的定义,传入几个参数
    def dfs(self, results, array, nums):
        #递归的出口,如果是长度已经符合的话,则返回
        if (len(array) == len(nums)):
            results.append(list(array))
            return 
        
        
        #递归的拆解
        for num in nums:
            if num not in array:
                array.append(num)
                #一直会回来在重新循环判断,是否符合要求
                self.dfs(results, array, nums)
                #返回完毕之后,开始移除
                array.pop()
            
                

 

全排列II

如果是存在重复的元素,也是每个元素只能使用一次的话

DFS + Visit(已经访问过的记录,index)

class Solution:
    """
    @param: nums: A list of integers.
    @return: A list of permutations.
    """
    def permute(self, nums):
        # write your code here
        
        #递归版本
        results = []
        visits = {}
        self.dfs(results, [], nums, visits)
        return results 
        
        
    #递归的定义,传入几个参数
    def dfs(self, results, array, nums, visits):
        #递归的出口,如果是长度已经符合的话,则返回
        if (len(array) == len(nums)):
            results.append(list(array))
            return 
        
    
        #递归的拆解
        for i in range(len(nums)):
            #如果是存在重复的数的话,如果是之前已经访问过,则记录下来,否则则可以进行插入
            if i not in visits:
                array.append(nums[i])
                visits[i] = True
                #一直会回来在重新循环判断,是否符合要求,下一次走就会自动从下一个开始走
                self.dfs(results, array, nums, visits)
                #返回完毕之后,开始移除
                array.pop()
#开始往回移除的时候,visits也开始删除访问记录 visits.pop(i)

 

标签:排列,15,递归,nums,self,results,visits,array
来源: https://www.cnblogs.com/yunxintryyoubest/p/13419914.html