力扣练习之全排列

我爱海鲸 2025-04-13 00:22:05 力扣、中级算法

简介中级算法、回溯算法

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvqup5/

解法一:

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

    private void backStrack(List<List<Integer>> list,List<Integer> tmpList,int[] nums) {
        if (tmpList.size() == nums.length) {
            list.add(new ArrayList<>(tmpList));
            return;
        }

        for (int i = 0 ; i < nums.length ; i++) {
            if (tmpList.contains(nums[i])) {
                continue;
            }
            tmpList.add(nums[i]);
            backStrack(list,tmpList,nums);
            tmpList.remove(tmpList.size() - 1);
        }

    }
}

思路:回溯法

如图

如上两张图就能够清晰的解释,回溯法的算法思路。

2025-04-13 start:

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }
    for (选择 : 本层集合中的元素) {
        处理节点;
        backtracking(路径, 选择列表); // 递归
        撤销处理; // 回溯
    }
}

end

你好:我的2025