题目描述:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
题目大意:
- 扒去题目外部的唬人的外衣,就是给定你一个数组,如例子中的图片所示,然后题中给你规定了一种行进方式,就是每个位置你只能向下面和它挨着最近的那两个位置走,语言描述不太准确,直接看例子图片,就会明白了
- 最后让你返回走到底,也就是最后一行时,最小的路径和
解题思路:
- 首先声明,此题为动态规划标签下的题目,下面直接上动态规划解法
- 第一步:dp table的定义是什么?因为题目中让你求最小路径和啊,那么如果你把到达每个位置的最小的路径和都写出来了,就是将那个dp table 填充好,那答案不就是最后一行中,最小的那个数吗
- 故,dp table就定义为每个位置的最小路径和,即dp[row][column]代表第row行,第column列的那个位置上的最小路径和
- 第二步:怎么将每个位置的dp table的值,按照一个规律推导出来呢?其实各位在纸上一写,就明白了,一般的位置的最小路径和,就等于那个位置的上一行,那个位置的列的相邻两个的dp table 最小值,加上那个位置的值,这里语言还是描述不准确,看代码,就明白了
- 第三步:就是代码实现想法即可
- 最后想说,其实这道题的话,如果你将dp table 的定义,定义准确了,基本推导和代码实现不是问题,还是常规填充dp table 即可
少废话,上代码:
class