๐ŸŒ• 47. ๅ…จๆŽ’ๅˆ— II

ๅžไฝ›็ซฅๅญ2022ๅนด6ๆœˆ9ๆ—ฅ
  • algorithm
  • backtrace
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ• 47. ๅ…จๆŽ’ๅˆ— II

้šพๅบฆ: ๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_26.png


่งฃๆณ•

class Solution {
    List<List<Integer>> res = new LinkedList<>();
    public List<List<Integer>> permuteUnique(int[] nums) {
        // ๆ€่ทฏ๏ผš
        // ้‡ๅคๆ•ฐ็ป„ & ๅ…จๆŽ’ๅˆ—
        Arrays.sort(nums); // ็”จไบŽๅŒๅฑ‚ๅŽป้‡
        int len = nums.length;
        LinkedList<Integer> path = new LinkedList<>();
        int[] used = new int[len];
        mySol(nums, len, used, path);
        return res;
    }

    private void mySol(int[] nums, int len, int[] used, LinkedList<Integer> path) {
        // ้€’ๅฝ’็ปˆๆญขๆกไปถ
        if(path.size() == len) {
            res.add(new LinkedList<>(path));
            return;
        }
        for(int i = 0; i < len; i ++) {
            if(used[i] == 1) {
                continue;
            }
            if(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == 0) {
                continue; // ๅŒๅฑ‚ๅŽป้‡๏ผŒ็”ปๅ›พ็†่งฃ
            }
            path.addLast(nums[i]);
            used[i] = 1;
            mySol(nums, len, used, path);
            used[i] = 0;
            path.removeLast();
        }
    }
}

่พ“ๅ‡บ

img_25.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/6/20 ไธ‹ๅˆ8:24:47
่ดก็Œฎ่€…: liuxianzhishou