<aside> 💡
排列问题与组合问题的差别:
明白了排列问题的特点,问题就变为如何知道哪些元素已经被使用过了。其解法也比较容易想到了:使用used数组标记使用过的元素
vector<bool> used;
vector<int> cur;
vector<vector<int>> ans;
void backtracking(vector<int>& nums) {
if (cur.size() == nums.size()) {
ans.push_back(cur);
}
for (int i = 0; i < nums.size(); ++i) {
if (used[i]) {
continue;
}
used[i] = true;
cur.push_back(nums[i]);
backtracking(nums);
cur.pop_back();
used[i] = false;
}
}
vector<vector<int>> permute(vector<int>& nums) {
// 使用used数组来标记使用过的元素,初始全为false
used = vector<bool>(nums.size(), false);
backtracking(nums);
return ans;
}