본문 바로가기

00/algorithm

Permutations (in Python)

반응형

Problem


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

Example:

Input: [1,2,3]
Output:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]


Solution


•종료 조건 : index가 현재 배열의 길이와 같을 때.

•i번째 원소와 현재 선택한 원소(first)를 바꾸고

•i+1번째 원소부터 다시 탐색을 시작한다.

•i번째 원소를 다시 돌려 놓는다. (다음 탐색에 영향을 주지 않기 위해서.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        if not nums :
            return []
 
        ans = []
        n = len(nums)
 
        def backtrack(first=0) :
 
            if first == n :
                ans.append(nums[:])
            for i in range(first, n) :
                
                nums[i], nums[first] = nums[first], nums[i]
                backtrack(first+1)
                nums[i], nums[first] = nums[first], nums[i]
        
        backtrack()
        return ans
cs



Complexity Analysis

• Time complexity : \(O(N!)\) to build N! solutions.

•Space complexity : \(O(N!)\) since one has to keep N! solutions.



Source

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

반응형

'0 > algorithm' 카테고리의 다른 글

Add Binary (in Python)  (0) 2019.01.23
Rotate Image (in Python)  (0) 2019.01.23
Spiral Matrix (in Python)  (0) 2019.01.23
Find First and Last Position of Element in Sorted Array (in Python)  (0) 2019.01.22
Next Permutation (in Python)  (0) 2019.01.21