less than 1 minute read

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

문제 : 서로 다른 정수를 입력받아 가능한 모든 순열을 리턴하라

입력 : [1, 2, 3]
출력 : [[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]

class Solution {
    public List<List<Integer>> permute(int[] nums) {
         List<List<Integer>> result = new ArrayList<List<Integer>>();
        dfs(result, 0, nums);
        return result;
    }

    public void dfs(List<List<Integer>> result, int start, int[] nums) {
        if(start == nums.length) {
            List<Integer> temp = new ArrayList<Integer>();
            for(int num : nums) {
                temp.add(num);
            }
            result.add(temp);
            return;
        } 
        for(int i=start; i<nums.length; i++) { // start부터 시작
            swap(i, start, nums);
            dfs(result, start+1, nums);
            swap(i, start, nums);
        }
    }

    public void swap(int i, int j, int[] nums) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
  • 순서를 바꿔주며 돌린다.