静态网站公用头部 调用标题,智能网站,seo方案,wordpress 侧边悬浮框LeetCode刷题记录 文章目录 #x1f4dc;题目描述#x1f4a1;解题思路⌨C代码 #x1f4dc;题目描述 给定一个不含重复数字的数组 nums #xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1
输入#xff1a;nums [1,2,3]
输出#xff1a;[[1,2,…
LeetCode刷题记录 文章目录 题目描述解题思路⌨C代码 题目描述 给定一个不含重复数字的数组 nums 返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1
输入nums [1,2,3]
输出[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2
输入nums [0,1]
输出[[0,1],[1,0]]示例3:
输入nums [1]
输出[[1]]提示: 1 nums.length 6-10 nums[i] 10nums 中的所有整数 互不相同 解题思路
思路经典回溯 每个节点
前序位置 当前元素放入临时vector tmp标记当前元素已经使用过了used[i] true判断tmp的长度是否和nums的长度相同若相同则为全排列尾插到结果数组 中序位置递归 – 遍历nums递归没有使用过的元素后序位置撤销操作回溯 used[i] false 当前值标记为未使用tmp.pop_back() (临时数组删除当前元素)
主函数中需要遍历每一个元素为起始
即 for(i : nums)
⌨C代码
class Solution {
public: void backtrack(vectorvectorint vv, vectorbool used, const vectorint nums, vectorint tmp) { //结束条件 if (tmp.size() nums.size()) { //走到最底了 vv.push_back(tmp); return; } for (int i 0; i nums.size(); i) { if (used[i]) { //如果被使用continue continue; } //如果当前元素没有被使用 //操作 used[i] true; tmp.push_back(nums[i]); //递归问题 - 临时变量的是 tmp 和 used数组 backtrack(vv, used, nums, tmp); //撤销操作 used[i] false; tmp.pop_back(); } } vectorvectorint permute(vectorint nums) { int len nums.size(); //设立一个标记数组。 vectorbool used(len, false); //保存最终结果 - 长度未知 //临时容器 vectorint tmp; vectorvectorint vv; backtrack(vv, used, nums, tmp); return vv; }
};