问题:
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
解题思路:
该题是一道典型的动态规划的题目,到 i 行, j 列元素的最小的路径为 f[i][j],则f[i][j] = min(f[i - 1][j - 1], f[i - 1][j]) + d[i][j],其中 d[i][j]为 i 行,j 列元素的值。
int minimumTotal(vector<vector<int> > &triangle) {
// write your code here
int result = 0;
int row = triangle.size();
if(row < 1)
return result;
int col = triangle[row - 1].size();
//创建辅助数组,完成动规
int **cache = new int*[row];
for(int i = 0; i < row; i++){
cache[i] = new int[col];
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
cache[i][j] = 0;
}
}
//填充辅助数组
cache[0][0] = triangle[0][0];
for(int i = 1; i < row; i++){
for(int j = 0; j <= i; j++){
if(j == 0){
cache[i][j] = cache[i - 1][j] + triangle[i][0];
}else if(j == i){
cache[i][j] = cache[i - 1][j - 1] + triangle[i][j];
}else{
cache[i][j] = min(cache[i - 1][j - 1], cache[i - 1][j]) + triangle[i][j];
}
}
}
//计算最小值
int minsum = cache[row - 1][0];
for(int j = 1; j < col; j++){
if(cache[row - 1][j] < minsum){
minsum = cache[row - 1][j];
}
}
return minsum;
}
318

被折叠的 条评论
为什么被折叠?



