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

示例:

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

解题思路:回溯法

输入n个数对应的全排列个数为n!,考虑dfs求解,分别以数组中的每个数作为排列的起始位置,一定要注意一点:通过设置条件去掉那些无用的分支,本题的条件就是当某个数字已经存在于数组的时候就不再添加它,即中间输出数组中不存在重复数字!

具体代码:

class Solution {
public:
       void dfs46(vector<int>& nums, int idx, vector<int>& oneresult, vector<vector<int>>&result)
    {
        if (idx == nums.size())
        {
            result.push_back(oneresult);
            return;
        }

        for (int i = 0; i < nums.size(); ++i)
        {
            if (find(oneresult.begin(), oneresult.end(), nums[i]) == oneresult.end())
            {
                oneresult.push_back(nums[i]);
                dfs46(nums, idx + 1, oneresult, result);
                oneresult.pop_back();
            }
        }
    }

    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> result;
        vector<int> oneresult;
        dfs46(nums, 0, oneresult, result);
        return result;
    }
};

 

leetcode--46 全排列

 

 

相关文章:

  • 2022-12-23
  • 2021-09-27
  • 2021-06-20
  • 2021-08-29
  • 2021-08-25
  • 2022-12-23
  • 2022-01-09
猜你喜欢
  • 2021-08-14
  • 2020-04-26
  • 2021-07-22
  • 2021-06-24
  • 2021-08-09
  • 2021-06-02
相关资源
相似解决方案