Java教程

回溯算法:排列问题

本文主要是介绍回溯算法:排列问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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;
        }
    }
}
这篇关于回溯算法:排列问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!