https://leetcode.cn/problems/permutations/description/

<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;
}