LeetCode46. 全排列

题目

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

思路

回溯解决排列问题。这里和组合问题、切割问题和子集问题最大的不同就是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 };

 

posted @ 2021-02-01 21:29  Uitachi  阅读(33)  评论(0编辑  收藏  举报