알고리즘🅰/리트코드

[리트코드] 46. Permutations

개발조각 2022. 10. 9. 15:51
728x90
반응형

문제

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

 

Permutations - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이번 문제는 순열을 구하는 문제입니다.


해결방안

먼저 모든 숫자가 나올 수 있는 경우를 구하였습니다.

var permute = function(nums) {
    let result = [];
    
    permutations()
    function permutations(arr=[]){
        if(arr.length === nums.length){
            result.push(arr);
            return;
        }
        
        for(let i of nums){
            permutations([...arr, i]);
        }
    }
    return result
};

 

아래와 같은 예제가 있으면

Input: nums = [1,2,3]

return 값이 1, 2, 3으로 구성할 수 있는 모든 경우가 나옵니다.

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

 

 

저희는 같은값이 안 나오는 값만 골라주면 됩니다.

그래서 for문에 아래와 같은 코드를 더 작성해주었습니다.

if(!arr.includes(i)) permutations([...arr, i]);

그러면 arr에서 i값이 있으면 추가를 안 해주고 없으면 i를 추가해주면 됩니다.


소스코드

var permute = function(nums) {
    let result = [];
    
    permutations()
    function permutations(arr=[]){
        if(arr.length === nums.length){
            result.push(arr);
            return;
        }
        
        for(let i of nums){
            if(!arr.includes(i)) permutations([...arr, i]);
        }
    }
    return result
};

728x90
반응형