C刷题:LeetCode 46. 全排列 (中等) 您所在的位置:网站首页 全排列c语言算法 C刷题:LeetCode 46. 全排列 (中等)

C刷题:LeetCode 46. 全排列 (中等)

2023-03-22 20:41| 来源: 网络整理| 查看: 265

目录

回溯法/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 实验室设备网 版权所有