LeetCode 046. 全排列 dfs 和 dfs_swap
地址 https://leetcode-cn.com/problems/permutations/submissions/
给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
算法1
使用DFS 进行填充的尝试
使用了vis数组标注那些数字已经使用 那些没有使用
class Solution { public: vector<int> vis; vector<vector<int>> ans; vector<int> v; void dfs(vector<int>& nums, int idx) { if (idx > nums.size()) return; if (idx == nums.size()) { ans.push_back(v); return; } for (int i = 0; i < nums.size(); i++) { if (vis[i] == 0) { v[idx] = nums[i]; vis[i] = 1; dfs(nums, idx + 1); vis[i] = 0; v[idx] = -1; } } return; } vector<vector<int>> permute(vector<int>& nums) { int len = nums.size(); vis = vector<int>(len,0); v = vector<int>(len, -1); dfs(nums, 0); return ans; } };
算法2
直接每局索引 交换nums的两个索引 就得到新的组合
关键是如何取得交换的两个索引 保证不漏不重
代码流程 从索引0开始分别后索引1,2,3~~~n的数字交换 得到新的组合
由于还有不交换的情况 索引考虑了索引0和索引0的交换
class Solution { public: vector<vector<int>> ans; void dfs(vector<int>& nums, int idx) { if (idx >= nums.size()) return; if (idx == nums.size() - 1) { ans.push_back(nums); return; } for (int i = idx ; i < nums.size(); i++) { swap(nums[i], nums[idx]); dfs(nums, idx + 1); swap(nums[i], nums[idx]); } } void printVec(const vector<vector<int>>& ans) { for (auto& e : ans) { for (auto&ee : e) { cout << ee << " "; } cout << endl; } } vector<vector<int>> permute(vector<int>& nums) { dfs(nums, 0); //printVec(ans); return ans; } };
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2019-12-03 Leetcode 1020 飞地的数量