基本的回溯法
注意每次回溯回来要把上次push_back()进去的数字pop掉!
class Solution { public: void backTrack(vector<int> nums, vector<vector<int>>& ans, vector<int> res, int k, map<int,bool> m) { if(k == nums.size()) { ans.push_back(res); } else { for(int i=0;i<nums.size();i++) { if(m.at(nums.at(i))) { m.at(nums.at(i)) = false; res.push_back(nums.at(i)); backTrack(nums,ans,res,k+1,m); res.pop_back(); m.at(nums.at(i)) = true; } } } } vector<vector<int>> permute(vector<int>& nums) { map<int,bool> m;//判断数字是否已经使用,true为未用过 vector<vector<int>> ans; vector<int> res; for(int i=0;i<nums.size();i++) { m.insert(pair<int,bool>(nums[i],true)); } backTrack(nums,ans,res,0,m); return ans; } };