leetcode 46 全排列 回溯
最直观的想法就是 长度为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]); // 回改当前节点状态 } } };