LeetCode 매일 한 문제:permutations

1214 단어

문제 설명


Given a collection of numbers, return all possible permutations. For example, [1,2,3]have the following permutations: [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].

문제 분석


수조 전체 배열 문제, 전형적인 귀속 알고리즘, 매번 두 개의 숫자를 교환하여 모든 수조를 생성하면 된다.

코드 구현

public ArrayList> permute(int[] num) {
        ArrayList> result = new ArrayList<>();
        if (num.length == 0) return result;
        permuteSwap(0, num, result);
        return result;
    }

    private void permuteSwap(int i, int[] num, ArrayList> result) {
        ArrayList list = new ArrayList<>();
        if (i == num.length) {
            for (int j = 0; j < num.length; j++) {
                list.add(num[j]);
            }
            result.add(list);
            return;
        }
        for (int j = i; j < num.length; j++) {
            int temp = num[i];
            num[i] = num[j];
            num[j] = temp;
            permuteSwap(i + 1, num, result);
            temp = num[i];
            num[i] = num[j];
            num[j] = temp;
        }
    }

좋은 웹페이지 즐겨찾기