摘要: 1.拓扑排序算法 适用范围: 要求有向图, 且有入度为0的节点, 且没有环 2.最小生成树算法: (1).kruskal算法 适用范围: 要求无向图 (2).prim算法 适用范围: 要求无向图 3.Dijkstra算法 适用范围: 没有权值为负数的边 阅读全文
posted @ 2018-04-28 16:07 SkyeAngel 阅读(264) 评论(0) 推荐(1) 编辑
摘要: 宽度优先(用队列和HashSet): 用来记录某个点到没到过,可以使用HashSet来将到达的点注册(防止已经进入队列的结点再次进入) 使用Queue来记录遍历的点,然后先进先出,加入它的next数组,且在加入队列和set中时,要判断,是否已经在set中了,若已存在,则忽略 深度优先(用栈和Hash 阅读全文
posted @ 2018-04-28 15:37 SkyeAngel 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 给你一个数组arr, 和一个整数aim。 如果可以任意选择arr中的数字, 能不能累加得到aim, 返回true或者false 类似于字符串的子串,数组中的每个数字都可以在求和结果中,也可以不在 所以使用递归可以求得 改为动态规划: * dp维度:位置index和当前的求和结果res,所以dp[ar 阅读全文
posted @ 2018-04-28 14:43 SkyeAngel 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 给你一个栈, 请你逆序这个栈, 不能申请额外的数据结构, 只能使用递归函数。 如何实现? 阅读全文
posted @ 2018-04-28 09:10 SkyeAngel 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 给你一个二维数组, 二维数组中的每个数都是正数, 要求从左上角走到右下角, 每一步只能向右或者向下。 沿途经过的数字要累加起来。 返回最小的路径和。 解:暴力递归 * 因为是从左上角到右下角,只能向右或者向下, * 可以使用递归, * 把问题简化为 * 当前位置(i, j)和右边位置(i + 1, 阅读全文
posted @ 2018-04-28 08:57 SkyeAngel 阅读(1117) 评论(0) 推荐(0) 编辑
摘要: 母牛每年生一只母牛, 新出生的母牛成长三年后也能每年生一只母牛, 假设不会死。 求N年后, 母牛的数量。 解: 母牛的数量 * 1 2 3 4 5 6 7 * 1 2 3 4 6 9 13 * 因为小牛是三年之后就可以繁育,而且牛不会死掉,所以当年的牛都可以保留到下一年 * 所以第i年的牛的数量 = 阅读全文
posted @ 2018-04-28 08:56 SkyeAngel 阅读(724) 评论(0) 推荐(0) 编辑
摘要: 打印一个字符串的全部排列 阅读全文
posted @ 2018-04-28 08:55 SkyeAngel 阅读(517) 评论(0) 推荐(0) 编辑
摘要: 打印一个字符串的全部子序列, 包括空字符串 在字符串的子序列中,每个字符都包含两种情况, * 1.该字符在序列中 * 2.该字符不在序列中 解:递归 *base case:当前位置指向字符串的最后一个字符时,返回所以在递归的过程中分为两种情况: * 1.该字符在序列中 * 2.该字符不在序列中 阅读全文
posted @ 2018-04-28 08:54 SkyeAngel 阅读(1038) 评论(0) 推荐(0) 编辑
摘要: 打印n层汉诺塔从最左边移动到最右边的全部过程 递归时:from to help三个柱子 n层 base case:当n == 1时,直接从from移动到to上 要想完成将n层的汉诺塔从from移动到to,采用递归时,只需要考虑 n 和 n-1 层之间的关系 步骤1:将n-1层从from移动到help 阅读全文
posted @ 2018-04-28 08:53 SkyeAngel 阅读(900) 评论(0) 推荐(0) 编辑