15. 全排列(DFS)
阿新 • • 發佈:2018-12-24
程式碼:
程式碼解析:class Solution { public: /* * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int>> permute(vector<int> &nums) { // write your code here vector<vector<int> >result; vector<int>temp; vector<bool>visited(nums.size(),false); permuteDFS(nums,0,visited,temp,result); return result; } void permuteDFS(vector<int>&nums,int level,vector<bool>&visited,vector<int>&temp,vector<vector<int> >&result) { if(level==nums.size()) result.push_back(temp); else { for(int i=0;i<nums.size();i++) { if(!visited[i]) { visited[i]=true; temp.push_back(nums[i]); permuteDFS(nums,level+1,visited,temp,result); temp.pop_back();//將最後一個元素取出,並將其設定為未訪問過,進行回溯 visited[i]=false; } } } } };
if(!visited[i])
{
visited[i]=true;
temp.push_back(nums[i]);
permuteDFS(nums,level+1,visited,temp,result);
temp.pop_back();//將最後一個元素取出,並將其設定為未訪問過,進行回溯
visited[i]=false;
}
其中temp.pop_back()和visited[i]=false,就是為下次回溯做準備,比如我們得到了全排列1,2,3,他的接下來的全排列為1,3,2。