递归、回溯、DFS、DP
heimu24
这个作者很懒,什么都没留下…
展开
-
【回溯法】:剑指offer12:矩阵中的路径
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字...原创 2019-08-18 16:10:58 · 151 阅读 · 0 评论 -
【动态规划】剑指offer14:剪绳子
题目描述:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.思想定义f(n)为把长度为n的绳子剪成若干段后各段长度乘积的最大值在剪第一刀的时候,我们有n...原创 2019-08-17 11:30:23 · 135 阅读 · 0 评论 -
【算法】动态规划
题目描述:public class test { public static int minPathSum(int [][] grid) { int m = grid.length, n = grid[0].length; int [][] dp = new int [m][n]; dp[0][0] = grid[0][0]; //第一列只有由数字向下移动得到 for (...原创 2019-05-30 11:25:23 · 123 阅读 · 0 评论 -
【递归-数组全排列】
仅以此博客记录学习,侵权即删。利用递归实现数组的全排列,个数为12***n参考链接import java.util.Arrays; public class permutation{//s表示,从array[start]后的数据进行全排列public static void permute(int[] array,int start){ if(start==array.leng...原创 2019-08-03 17:25:18 · 454 阅读 · 0 评论 -
【三角形最大路径和】递归、记忆化搜索、深度搜索(DFS打印所有路径、最大路径)、动态规划(DP)对比
参考链接,请参考原文,博主按照该文章顺了一遍,并加上自己的理解而已下面所有的代码,如果不想提前新建nums[1000][1000],可以使用双重list动态存储题目描述有一个层数为n(n<=1000)的数字三角形。现有一只蚂蚁从顶层开始向下走,每走下一级,可向下或右下方向走。求走到底层后它所经过数字的总和的最大值。【输入格式】第一个整数为n,一下n行为各层的数字。【输出格式】一...原创 2019-08-19 17:45:44 · 1708 阅读 · 0 评论 -
【二叉树-3】打印二叉树中和为target的所有路径
参考链接题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思想:利用树的先序遍历访问所有结点,先将当前结点存储,然后更新target为target-root.val,继续递归访问其左右子树即可。如果到达叶子结点的时候,target==0,则当前路径即为所求路径import java.uti...原创 2019-08-20 17:59:48 · 679 阅读 · 0 评论 -
剑指offer 38:字符串的排列(组合)
题目:输入一个字符串,打印出该字符串中字符的所有排列,例如,输入字符串abc,打印出由字符abc、acb、bac、bca、cba、cab。思想:把字符串看成两部分,第一部分是它的第一个字符,第二部分是后面的左右字符求出第一部分所有可能的情况(通过第一个字符和其后面字符交换实现)第二部分的字符仍然可以分成:后面部分第一个字符及其之后的字符(递归实现)package test;pub...原创 2019-09-07 17:54:58 · 349 阅读 · 0 评论