Leetcode:46. 全排列

xiaoxiao2025-04-07  14

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

示例:

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

解题思路:

DFS;对于3个数的数组而言,有人可能会想到用3层for能够实现,而DFS就是处理个数未知的组合问题,当递归访问的元素个数达到原数组规模的时候,存储访问路径即可。

 

C++代码 class Solution { public:     vector<vector<int>> permute(vector<int>& nums) {         N = nums.size();         data = nums;         visit = vector<bool>(N, false);         vector<int> road;         DFS(0,road);         return res;     }     void DFS(int pos, vector<int> road) {         if (int (road.size()) == N) {             res.push_back(road);         }         for (int i = 0; i <= N - 1; i++) {             if (visit[i] == false) {                 visit[i] = true;                 road.push_back(data[i]);                 int len = road.size();                 DFS(i + 1, road);                 visit[i] = false;                 road.erase(road.begin() + len - 1, road.end());             }         }     } private:     int N;     vector<int> data;     vector<bool> visit;     vector<vector<int>> res; };

 

转载请注明原文地址: https://www.6miu.com/read-5027730.html

最新回复(0)