zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):046-Permutations

    题目来源:

      https://leetcode.com/problems/permutations/


    题意分析:

      给定一个数字的集合,输出他们的所有排序情况(也就是全排列)。不要求排序顺序。也就是[1,2]得到[[1,2],[2,1]]或者[[2,1],[1,2]]都是对的。


    题目思路:

      ①刚开始的思路是先将nums[:n - 1]的所有情况输出,然后这些结果,每个在不同的位置插入最后一个数。然后就很快出来结果了。这个用递归的方法很容易实现。

      ②用前面一题的思想。给出一个排列情况,输出下一个排列的结果,然后将其append到结果里面输出就可以了。

      两个方法的时间复杂度都是O(n!)


    代码(python):

     1 class Solution(object):
     2     def solve(self,nums,n):
     3         if n == 0:
     4             return [[nums[0]]]
     5         tmp = self.solve(nums,n - 1);ans = []
     6         for i in tmp:
     7             for j in range(len(i) + 1):
     8                 t = i[:];t.insert(j,nums[n])
     9                 ans.append(t)
    10         return ans
    11     def permute(self, nums):
    12         """
    13         :type nums: List[int]
    14         :rtype: List[List[int]]
    15         """
    16         size = len(nums)
    17         if size == 0:
    18             return []
    19         nums.sort()
    20         return self.solve(nums,size - 1)
    21         
    递归
     1 class Solution(object):
     2     def nextp(self,nums):
     3         size = len(nums);i = size - 2
     4         while i >= 0:
     5             if nums[i] < nums[i + 1]:
     6                 j = i + 1
     7                 while j < size:
     8                     if nums[i] >= nums[j]:
     9                         break
    10                     j += 1
    11                 j -= 1
    12                 nums[i],nums[j] = nums[j],nums[i]
    13                 ans = nums[:i + 1] + nums[:i:-1]
    14                 return ans
    15             i -= 1
    16         ans = nums[::-1]
    17         return ans
    18     def permute(self, nums):
    19         """
    20         :type nums: List[int]
    21         :rtype: List[List[int]]
    22         """
    23         size = len(nums)
    24         if size == 0:
    25             return []
    26         nums.sort();tmp = nums[:];ans = []
    27         ans.append(nums)
    28         while True:
    29             tmp = self.nextp(tmp)
    30             if tmp != nums:
    31                 t = tmp[:]
    32                 ans.append(t)
    33             else:
    34                 break
    35         return ans
    next_permutaion

    转载请注明出处:http://www.cnblogs.com/chruny/p/4953694.html

  • 相关阅读:
    redis单机安装以及简单redis集群搭建
    Linux中JDK安装教程
    微信公众号开发(一)
    easyui多图片上传+预览切换+支持IE8
    mybatis动态sql之foreach标签
    java List递归排序,传统方式和java8 Stream优化递归,无序的列表按照父级关系进行排序(两种排序类型)
    java钉钉通讯录同步
    java使用poi生成导出Excel(新)
    java 图片转base64字符串、base64字符串转图片
    Spring事务mysql不回滚:mysql引擎修改
  • 原文地址:https://www.cnblogs.com/chruny/p/4953694.html
Copyright © 2011-2022 走看看