LeetCode-46.全排列(考察点:回溯算法)

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

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

解题思路:这个...感觉很难讲明白,大家看代码自己体会吧......

java代码:

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> result = new LinkedList<>();
        int[] flag = new int[nums.length];
        List<Integer> innerLS = new ArrayList<>(nums.length);
        helper(nums, flag, nums.length, innerLS, result);

        return result;
    }

    void helper(int[] nums, int[] flag, int leftCnt, List<Integer> innerLS, List<List<Integer>> outerLS){
        if(0 == leftCnt){
            outerLS.add(innerLS);
            return;
        }

        for(int index = 0; index < nums.length; index++){
            if(0 == flag[index]){
                int[] f = Arrays.copyOf(flag, flag.length);
                List<Integer> i = new ArrayList<>(innerLS);
                int left = leftCnt;
                f[index] = 1;
                i.add(nums[index]);
                helper(nums, f, --left, i, outerLS);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38823568/article/details/81626989
今日推荐