LeetCode ! 46. Permutation

参考资料:左程云算法课

46. Permutations
Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.

 

Example 1:

Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

思路:深度优先遍历
nums[0] 分别与 nums[0], nums[1], … nums[n-1] 做交换得到的数组作为第一层;
下一层是
固定nums[0]的情况下,nums[1] 分别与 nums[1], … nums[n-1] 做交换得到的数组;
再下一层是,
固定nums[0], nums[1]的情况下,nums[2]分别与 nums[2], nums[3], … nums[n-1] 做交换得到的数组们
。。一直到固定了nums[0], nums[1], … nums[n-1] ,也就是到达叶节点,才记录到ans中。

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        int n = nums.length;
        List<List<Integer>> ans = new ArrayList<>();
        f(nums,0,ans);
        return ans;
    }
    public void f(int[] nums, int index, List<List<Integer>> ans)
    {
        if(index==nums.length)
        {
            List<Integer> path = new ArrayList<>();
            for(int i:nums)
            {
                path.add(i);
            }
            ans.add(path);
            return;
        }

        for(int i=index;i<nums.length;i++)
        {
            swap(nums,i,index);
            f(nums,index+1,ans); // nums 带着这个修改痕迹 往更深层走去
            swap(nums,i,index);
        }
    }
    public void swap(int[] nums, int i, int j)
    {
        int t = nums[i];
        nums[i] = nums[j];
        nums[j]=t;
    }
}

你可能感兴趣的:(数据结构与算法,leetcode,算法,数据结构)