力扣每日一题 -【全排列】

力扣每日一题 -【全排列】_第1张图片
力扣每日一题 -【全排列】_第2张图片

题目链接
视频讲解

class Solution {
public:
    vector<vector<int>> res; 
    vector<int> path;   
    vector<bool> st; //path数组中元素的映射位

    vector<vector<int>> permute(vector<int>& nums) {
        st.resize(nums.size(), false);
        path.resize(nums.size());
        dfs(nums, 0);
        return res;
    }

    void dfs(vector<int> &nums, int u)
    {
        if(u >= nums.size()){ //记录总方案数
            res.push_back(path);  
            return ;
        } 

        for(int i = 0; i < nums.size(); i++){
            if(!st[i]){
                path[u] = nums[i];
                st[i] = true;    //选完当前层的数后, 将标志位改成true
                dfs(nums, u + 1);  //选下一层的数
                st[i] = false;     //回溯, 将标志位改成false, 方便清空path的值
            }
        }
    }
};

你可能感兴趣的:(力扣解题,leetcode,算法,深度优先)