最直观的想法就是 长度为n的数组   第一个位置有n个选择,第二个有n-1,第三个有n-2.....所有的为n!

可以用一个数组来记录,每次记录完后清空,但不如直接在原数组上操作 

递归到深度为长度-1即可,因为倒数第二个安排好以后最后一个也没得选择了。

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
    vector<vector<int>> ans;
    backtracking(nums, 0, ans);
    return ans;
}
// 辅函数
void backtracking(vector<int> &nums, int level, vector<vector<int>> &ans) {
    if (level == nums.size() - 1) {
        ans.push_back(nums);
        return;
    }
    for (int i = level; i < nums.size(); i++) {
        swap(nums[i], nums[level]); // 修改当前节点状态
        backtracking(nums, level+1, ans); // 递归子节点
        swap(nums[i], nums[level]); // 回改当前节点状态
     }
  }
};