标签:tor false continue 需要 solution start 交换 public push
基础backtracing的题。
class Solution { public: vector<vector<int>> res; vector<vector<int>> permute(vector<int>& nums) { vector<int> cur; vector<bool> used(nums.size()); dfs(cur,used,nums); return res; } void dfs(vector<int> cur, vector<bool> &used, vector<int>& nums){ if (cur.size()==nums.size()){ res.push_back(cur); return; } for (int i=0;i<nums.size();++i){ if (used[i]) continue; used[i]=true; cur.push_back(nums[i]); dfs(cur,used,nums); used[i]=false; cur.pop_back(); } } };
之前的方法需要一个used来判断元素是否被使用过。
而下面这种方法思路很不错,每次交换数组里两个元素,当前面都枚举完毕后,从[start,...,end]依次交换。
class Solution { public: vector<vector<int>> permute(vector<int> &nums) { vector<vector<int>> res; dfs(nums,0,res); return res; } void dfs(vector<int> &nums, int start, vector<vector<int>> &res) { if (start == nums.size()){ res.push_back(nums); return; } // permute num[start..end()] for (int i=start;i<nums.size();++i){ swap(nums[start],nums[i]); dfs(nums,start+1,res); swap(nums[start],nums[i]); } } };
标签:tor false continue 需要 solution start 交换 public push
原文地址:https://www.cnblogs.com/hankunyan/p/9589899.html