热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode120.三角形最小路径和(动态规划、递归、记忆搜索)

三角形最小路径和题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点在这里指的是下标与上一层结点下标相
  1. 三角形最小路径和

题目:

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。

例如,给定三角形:

[[2],[3,4],[6,5,7],[4,1,8,3]
]

自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

思路:

  1. 暴力法,递归,n层,left or right:2^n
  2. DP
    a.重复性(分治) problem(i,j) = min(sub(i+1,j),sub(i+1,j+1)) + a[i,j]
    b.定义状态数组 f[i,j]
    c.DP方程:f[i,j] = min(f[i+1,j],f[i+1,j+1]) + a[i,j]

方法一:动态规划

public int minimumTotal(List<List<Integer>> triangle) {int[] A &#61; new int[triangle.size() &#43; 1];for (int i &#61; triangle.size() - 1;i >&#61; 0; i&#43;&#43;) {for(int j&#61; 0;j<triangle.get(i).size();j&#43;&#43;){//左右的最小者&#xff0c;加上自身A[j] &#61; Math.min(A[j],A[j&#43;1]) &#43; triangle.get(i).get(j);}}return A[0];}

方法二&#xff1a;递归 自顶向下

int row;public int minimumTotal_1(List<List<Integer>> triangle) {row &#61; triangle.size();return helper(0,0,triangle);}private int helper(int level, int c, List<List<Integer>> triangle) {System.out.println("helper : level&#61;" &#43; level &#43; "c &#61; " &#43; c);//递归终止条件if (level &#61;&#61; row - 1){return triangle.get(level).get(c);}int left &#61; helper(level &#43; 1, c, triangle);int right &#61; helper(level &#43; 1, c &#43; 1 , triangle);return Math.min(left,right) &#43; triangle.get(level).get(c);}

方法三&#xff1a;自顶向下&#xff0c;记忆化搜索

int row;Integer[][] memo;public int minimumTotal_2(List<List<Integer>> triangle) {row &#61; triangle.size();memo &#61; new Integer[row][row];return helper(0,0,triangle);}private int helper(int level, int c, List<List<Integer>> triangle) {if (memo[level][c] !&#61; null){return memo[level][c];}if (level &#61;&#61; row - 1){return memo[level][c] &#61; triangle.get(level).get(c);}int left &#61; helper(level&#43;1,c,triangle);int right &#61; helper(level&#43;1,c&#43;1,triangle);return memo[level][c] &#61; Math.min(left,right) &#43; triangle.get(level).get(c);}

方法四&#xff1a;自底向上 DP

public int minimumTotal_3(List<List<Integer>> triangle) {int row &#61; triangle.size();int[] minlen &#61; new int[row &#43; 1];for (int level &#61; row - 1; level>&#61; 0; level&#43;&#43;) {for (int i &#61; 0; i <&#61; level; i&#43;&#43;) {minlen[i] &#61; Math.min(minlen[i],minlen[i&#43;1]) &#43; triangle.get(level).get(i);}}return minlen[0];}


推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
author-avatar
文竹a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有