Python中的排列

假设我们有一个不同整数的集合;我们必须找到所有可能的排列。因此,如果数组类似于[2,1,3],则结果将为[[1,2,3],[1,3,2],[2,1,3],[2,3,1 ],[3,1,2],[3,2,1]

为了解决这个问题,我们将遵循以下步骤-

  • 我们将使用递归方法,这将使列表,开始,当前和res

  • 如果开始>列表长度– 1,则将curr添加到res中,然后返回

  • 因为我在范围内开始到给定列表的长度– 1

    • 交换索引开始处和(开始+(i –开始))中存在的列表元素

    • 排列(列表,开始+ 1,curr + [列表[开始]],res)

    • 交换索引开始处和(开始+(i –开始))中存在的列表元素

    • 最初调用置换(arr,0,[],res)

示例(Python)

让我们看下面的实现以更好地理解-

class Solution(object):
   def permute(self, nums):
      result = []
      self.permute_util(nums,0,[],result)
      return result
   def permute_util(self,given_list,start,curr,result):
      if start > len(given_list)-1:
         #print(curr)
         result.append(curr)
         return
      for i in range(start,len(given_list)):
         self.swap(given_list,start,start+(i-start)) self.permute_util(given_list,start+1,curr+[given_list[start]],result)
         #print(given_list)
         self.swap(given_list, start, start + (i - start))
   def swap(self,nums,index1,index2):
      temp = nums[index1]
      nums[index1] = nums[index2]
      nums[index2] = temp
ob1 = Solution()print(ob1.permute([1,2,3,4]))

输入项

[1,2,3,4]

输出结果

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