C刷题:LeetCode 46. 全排列 (中等) | 您所在的位置:网站首页 › 全排列c语言算法 › C刷题:LeetCode 46. 全排列 (中等) |
目录 回溯法/DFS深搜C语言模板全排列思路代码实现附:CleanCode参考资料本文涉及LeetCode类似题目: 1.全排列 II2.N 皇后 (困难)回溯法/DFS深搜C语言模板void backtrack(输入参数) { // baseCase终止条件 if (满足终止条件) { 将记录的结果存放到输出变量里; return; } // 递归调用 for (遍历当前层所有节点) { 处理节点,如把节点放入track数组 backtrack(节点信息,track信息) 返回节点,撤销track前面的记录,往上回溯 } return; } 输出参数 func(输入参数) { // 前置处理与内存空间动态申请 ... // 回溯或深搜递归实现 backtrack(输入/输出) return 输出参数 }下面举个具体例子。 全排列思路跳过审题,分析知就是一个穷举,关键是如何用合适的数据结构和算法实现,具体思路如下: 首先,按题目要求动态分配内存空间其次,实现回溯递归算法: a. 确认终止条件为到叶节点,也即track记录长度等于numsSizeb. 通过for循环遍历每层所有节点c. 经过节点时,记录当前节点,放入track数组d. 递归调用,继续往当前节点下一层搜索e. 返回节点时,弹出track数组中当前节点,往上回溯代码实现// 判断元素是否已被遍历 int isContain(int *nums, int len, int val) { int flag = 0; int i; for (i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |