• LeetCode 46. Permutations


    原题

    Given a collection of distinct numbers, return all possible permutations.

    For example,
    [1,2,3] have the following permutations:

    [
      [1,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]

    解题思路

    递归:递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长度满足要求加入答案中

    class Solution(object):
        def permute(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            if nums == None:
                return []
            visit = [0 for i in range(len(nums))]
            self.ret = []
            self._permute(nums, visit, 0, [])
            return self.ret
            
        def _permute(self, nums, visit, count, ret):
            if count == len(nums):
                self.ret.append(ret)
                return
            for i in xrange(len(nums)):
                if visit[i] == 0:
                    # ret += [nums[i]]  容易出错,如果加入这句后面需要还原,不然影响后面的循环
                    visit[i] = 1
                    self._permute(nums, visit, count+1, ret+[nums[i]])
                    visit[i] = 0
    

    非递归:跟之前求subsets的思路类似(不过这个是求重复项,sbusets是求非重复),也是从一个个元素一层层加上去,只不过加入结果的时候必须满足长度要求

    class Solution(object):
        def permute(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            if nums is None:
                return []
            result = []
            self.helper(nums, [], result)
            return result
    
        def helper(self, List, path, result):
            if len(path) == len(List):
                result.append(path)
                return
            
            # 跟subsets思路差不多,不过这个是重复,sbusets是非重复
            # 也是从一个个元素一层层加上去,只不过加入结果的时候必须满足长度要求
            for i in range(len(List)):
                # 不重复加入同一元素
                if List[i] in path:
                    continue
                # path.append(List[i])
                self.helper(List, path + [List[i]], result)
                # path.pop()
    

      

  • 相关阅读:
    IDEA激活方式(亲测有效)加汉化方式
    IDEA快捷键
    (转)RBAC权限模型——项目实战
    Nginx负载均衡策略
    nginx proxy_pass
    Nginx rewrite
    web cache server方案比较:varnish、squid、nginx
    LVS负载均衡工作模式和调度算法
    四层 七层负载均衡区别
    Nginx每天自动日志分割
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6632897.html
Copyright © 2020-2023  润新知