LeetCode-46. 全排列

题目描述 全排列

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

示例

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

解题思路

  • 深度优先搜索,当序列中的元素不重复时,存在 n! 种不同的排列;
  • 考虑第一个位置,有 n 种可能
  • 当选定了第一个位置,第二个位置有 n-1 种可能
  • 因为每次搜索的状态数是递减的,所以这里的 dfs 是一个循环递归的过程

代码

class Solution {
public:
    vector> permute(vector& nums)
    {
        int n=nums.size();
        vector> res;
        arange(res,nums,0,n-1);
        return res;
    }

    void arange(vector> &res,vector &nums,int left,int right)
    {
        if(left==right)
        {
            res.push_back(nums);
            return;
        }
        for(int i=left;i<=right;i++)
        {
            swap(nums[i],nums[left]);
            arange(res,nums,left+1,right);
            swap(nums[i],nums[left]);
        }
    }
};

你可能感兴趣的:(LeetCode-46. 全排列)