0
点赞
收藏
分享

微信扫一扫

120. Triangle


120. Triangle_python


题目大意:

有一个三角形矩阵,从最上边的顶点出发累加到底边,一共有多种情况,求这些情况中累加和的最小值

要求额外空间复杂度为O(n),n是行数

思路:
遍历矩阵,每走一步都更新当前值:
triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j])

120. Triangle_最小值_02


Python代码如下:

class Solution(object):
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
rows = len(triangle)
for i in range(1, rows):
cols = len(triangle[i])
for j in range(0, cols):
if j == 0:
triangle[i][j] += triangle[i-1][j]
elif j == cols - 1:
triangle[i][j] += triangle[i-1][j-1]
else:
triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j])
return min(triangle[rows-1])

附java代码

class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int rows = triangle.size();
// 上一行
List<Integer> lastLine = triangle.get(0);

for(int i = 1; i < rows; i++) {

// 本行
List<Integer> line = triangle.get(i);

line.set(0, line.get(0) + lastLine.get(0));
line.set(line.size()-1, line.get(line.size()-1) + lastLine.get(lastLine.size()-1));

for(int j = 1; j < line.size() - 1; j++) {
line.set(j, line.get(j) + Math.min(lastLine.get(j-1), lastLine.get(j)));
}
lastLine = line;
}

List<Integer> tailLine = triangle.get(rows-1);
int result = Integer.MAX_VALUE;
for(Integer i : tailLine) {
result = Math.min(result, i);
}
return result;
}
}


举报

相关推荐

0 条评论