本文共 932 字,大约阅读时间需要 3 分钟。
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
回溯法递归思路:
搜索路径选择path.push_back(nums[i]);
搜索路径回溯path.pop_back();
搜索结束条件nums.size() == path.size()
。
class Solution { vector> ans;//结果public: vector > permute(vector & nums) { vector path;//保存搜索路径 dfs(nums, path);//递归函数 return ans; } void dfs(vector &nums, vector path) { if(nums.size() == path.size()) { //搜索结束条件 ans.push_back(path);//保存搜索路径作为一次成功的搜索 return; } //穷举搜索 for(int i = 0; i < nums.size(); i++) { if(path.end() != find(path.begin(), path.end(), nums[i])) { continue;//排除已经搜索过的 } path.push_back(nums[i]);//搜索路径选择 dfs(nums, path);//递归搜索 path.pop_back();//搜索路径回溯(撤销搜索路径选择) } }};