给定一个 没有重复 数字的序列,返回其所有可能的全排列。
回溯解决排列问题。这里和组合问题、切割问题和子集问题最大的不同就是for循环里不用startIndex了。而used数组,其实就是记录此时path里都有哪些元素使用了,一个排列里一个元素只能使用一次
1 class Solution { 2 public: 3 vector<int>path; 4 vector<vector<int>>res; 5 void backtracking(vector<int>nums,vector<bool>used){ 6 if(path.size() == nums.size()){ 7 res.push_back(path); 8 return; 9 } 10 for(int i = 0;i < nums.size();i++){ 11 if(used[i]) continue; 12 used[i] = true; 13 path.push_back(nums[i]); 14 backtracking(nums,used); 15 path.pop_back(); 16 used[i] = false; 17 } 18 } 19 vector<vector<int>> permute(vector<int>& nums) { 20 vector<bool>used(nums.size(),false); 21 backtracking(nums,used); 22 return res; 23 } 24 };
原文:https://www.cnblogs.com/fresh-coder/p/14359135.html