回溯算法:排列问题

46. 全排列

给定一个不含重复数字的数组nums,返回其所有可能的全排列 。你可以按任意顺序返回答案。

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

输入:nums = [0,1]
输出:[[0,1],[1,0]]

输入:nums = [1]
输出:[[1]]

思路

回溯算法:排列问题

代码

class Solution {
    List<Integer> temp = new ArrayList<Integer>();
    List<List<Integer>> ans = new ArrayList<List<Integer>>();

    public List<List<Integer>> permute(int[] nums) {
        boolean[] used = new boolean[nums.length];
       backtracking(nums,used);
        return ans;
    }

    private void backtracking(int[] nums,boolean[] used) {
        if(temp.size() == nums.length) {
            ans.add(new ArrayList<>(temp));
            return;
        }

        // 遍历
        for (int i = 0; i < nums.length; i++) {
            if(used[i] == false) {
                temp.add(nums[i]);
                used[i] = true;
            }
            else 
                continue;
            backtracking(nums,used);
            temp.remove(temp.size()-1);
            used[i] = false;
        }
    }
}
上一篇:每天一篇文献:A SURVEY OF LEARNING FROM DEMONSTRATION USED IN ROBOTICS


下一篇:20210827每日总结