46. 全排列(DFS)
作者:互联网
46. 全排列
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1] 输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1] 输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums
中的所有整数 互不相同
1 class Solution { 2 public: 3 vector<vector<int>> ans; 4 vector<int> tmp; 5 void dfs(const vector<int> &nums, vector<bool> &isUsed) { // 从nums数组中第i个元素开始到数组大小等于nums为止 6 if (tmp.size() == nums.size()) { // 递归出口:如果选择的一组组合中元素的个数与nums相同,则找到一组组合 7 ans.emplace_back(tmp); 8 return; 9 } 10 for (unsigned int i = 0; i < nums.size(); i++) { 11 // 过滤选重的元素 12 if (isUsed[i]) { 13 continue; 14 } 15 isUsed[i] = true; // 标记该元素被选了 16 tmp.emplace_back(nums[i]); 17 dfs(nums, isUsed); // 继续选择下一个未选择的元素 18 tmp.pop_back(); // 回溯 19 isUsed[i] = false; 20 } 21 return; 22 } 23 vector<vector<int>> permute(vector<int>& nums) { 24 vector<bool> isUsed(nums.size(), false); // 标记数组中元素是否选过 25 dfs(nums, isUsed); 26 return ans; 27 } 28 };
标签:tmp,排列,nums,46,isUsed,元素,DFS,vector,size 来源: https://www.cnblogs.com/MGFangel/p/16339449.html