class Solution {
private:
vector<vector<int>> res;
vector<int> path;
void backTracking(vector<int>& nums, vector<bool>& used) {
if (path.size() == nums.size()) {
res.push_back(path);
return;
}
for (int i = 0; i < nums.size(); i++) {
if (used[i] == false) {
used[i] = true;
path.push_back(nums[i]);
backTracking(nums, used);
used[i] = false;
path.pop_back();
}
}
}
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(), false);
backTracking(nums, used);
return res;
}
};
回溯的经典题型-排列问题
首先得知道排列和组合的区别,排列是有顺序的,例如[1, 2]和[2, 1]是不同的,而对于组合,他们是相同的。
这题也是经典的排列问题,相比于组合问题和切割问题,排列问题就不再需要startIndex了,因为排列每次都是从头开始排列,则不再需要知道到底是从数组的那个地方开始了。然后就是需要定义一个used数组,判断所有元素中有哪些被用过,用过了的就不能在取了。