[LeetCode] 46. Permutation

yunanΒ·2021λ…„ 2μ›” 3일
0
post-thumbnail

πŸ”¦ 문제 링크

πŸ”Š 파이썬 μ•Œκ³ λ¦¬μ¦˜ 인터뷰 책을 μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€.

  • 문제

κ°€λŠ₯ν•œ λͺ¨λ“  μˆœμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€

✍️ 풀이


  1. λ‚΄κ°€ ν’€μ—ˆλ˜ λ°©λ²•μœΌλ‘œ tmpλ¦¬μŠ€νŠΈμ— 맀 λ‹¨κ³„μ˜ 선택값을 μ €μž₯해두고 λ‹€μŒ 단계 진행 μ‹œ tmpλ¦¬μŠ€νŠΈμ— μ—†λŠ” κ°’λ§Œμ„ μ„ νƒν•˜λ„λ‘ ν•œλ‹€.

  2. 책에 λ‚˜μ™€ μžˆλŠ” κ²ƒμ²˜λŸΌ λ¦¬μŠ€νŠΈμ—μ„œ μ„ νƒν•œ 값을 μ œμ™Έμ‹œν‚€λ©΄μ„œ μ§„ν–‰ν•˜λŠ” 방법

  • 맀 μ§„ν–‰μ‹œλ§ˆλ‹€ μ„ νƒν•œ 값을 λ¦¬μŠ€νŠΈμ—μ„œ μ‚­μ œν•˜κ³  선택 값은 λ”°λ‘œ 기둝해둔닀.
  • dfsλ₯Ό λΉ μ Έλ‚˜μ˜€λ©΄ κΈ°λ‘ν•œ 값을 λΉΌμ£Όκ³  λ³΅μ œν•œ λ¦¬μŠ€νŠΈμ—μ„œ λ‹€μ‹œ μ§„ν–‰ν•œλ‹€.

πŸ›  μ½”λ“œ


  • code 1
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def dfs(index):
            if len(tmp) == len(nums):
                cp = tmp[:] # 파이썬의 객체 μ°Έμ‘° νŠΉμ„±μœΌλ‘œ 인해 κΌ­ 볡사λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€.d
                result.append(cp)
                return
            for i in range(len(nums)):
                if nums[i] not in tmp:
                    tmp.append(nums[i])
                    dfs(i + 1)
                    tmp.pop()
        result = []
        tmp = []
        dfs(0)
        print(result)
        return result
  • code 2
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def dfs(elements):
            if len(elements) == 0:
                result.append(prev_elements[:])
            for e in elements:
                next_elements = elements[:]
                next_elements.remove(e)
                
                prev_elements.append(e)
                dfs(next_elements)
                prev_elements.pop()
                
        result = []
        prev_elements = []
        dfs(nums)
        return result
        
            

πŸ“ 정리


🎈 참고


Book 링크

profile
Go Go

0개의 λŒ“κΈ€