题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
两个要点:
1.使用used数组标记用过的,这个used是竖向的,之前的是横向的。因为是竖向,所以需要传参进去并且回溯。横向的不需要传参进去,作用域只在当前(一层for)函数里。
2.不需要index,因为横向需要重复选取。for循环里i都从0开始
代码:
- class Solution {
- public:
- vector
int>> result; - vector<int> path;
- vector
int>> permute(vector<int>& nums) { - vector<bool> used(nums.size(), false);
- backtracking(nums, used);
- return result;
- }
- void backtracking(vector<int>& nums, vector<bool>& used)
- {
- if(path.size() == nums.size())
- {
- result.push_back(path);
- return;
- }
- for(int i = 0; i < nums.size(); i++)
- {
- if(used[i] == true) continue;
- used[i] = true;
- path.push_back(nums[i]);
- backtracking(nums, used);
- path.pop_back();
- used[i] = false;//used需要回溯
- }
- }
- };