46. 全排列(DFS)
46. 全排列
给定一个不含重复数字的数组 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] <= 10
nums
中的所有整数 互不相同
1 class Solution { 2 public: 3 vector<vector<int>> ans; 4 vector<int> tmp; 5 void dfs(const vector<int> &nums, vector<bool> &isUsed) { // 从nums数组中第i个元素开始到数组大小等于nums为止 6 if (tmp.size() == nums.size()) { // 递归出口:如果选择的一组组合中元素的个数与nums相同,则找到一组组合 7 ans.emplace_back(tmp); 8 return; 9 } 10 for (unsigned int i = 0; i < nums.size(); i++) { 11 // 过滤选重的元素 12 if (isUsed[i]) { 13 continue; 14 } 15 isUsed[i] = true; // 标记该元素被选了 16 tmp.emplace_back(nums[i]); 17 dfs(nums, isUsed); // 继续选择下一个未选择的元素 18 tmp.pop_back(); // 回溯 19 isUsed[i] = false; 20 } 21 return; 22 } 23 vector<vector<int>> permute(vector<int>& nums) { 24 vector<bool> isUsed(nums.size(), false); // 标记数组中元素是否选过 25 dfs(nums, isUsed); 26 return ans; 27 } 28 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix