问题
原题链接:https://leetcode.cn/problems/permutations?envType=study-plan-v2&envId=top-100-liked
解法
这是一个很经典的回溯问题,在学习算法时全排序和八皇后是这类问题的典型。
我们用status记录vector每位数字的状态,已被采用则往下看,否则记录该数字(且修改status位)并递归处理,待长度达标时就完成了一次排列。依次完成全排列。
class Solution { public: int n=0; void dfs(vector<int>& nums,vector<bool>& sta,vector<int>& temp,vector<vector<int>>& res){ if(temp.size()==n){ res.push_back(temp); return; } for(int i=0;i<n;i++){ if(sta[i]) continue; sta[i]=true; temp.push_back(nums[i]); dfs(nums,sta,temp,res); sta[i]=false; temp.pop_back(); } } vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; n=nums.size(); vector<bool> sta(n,false); vector<int> temp; dfs(nums,sta,temp,res); return res; } };
|
