三角矩阵

问题描述
给定一个三角矩阵, 计算从三角矩阵顶部到底部的最小路径和, 每一步都可以移动到下面一行相邻的数字
比如, 给定下面的三角矩阵
[2]
[3] [4]
[6] [5] [7]
[4] [1] [8] [3]
最小的从顶部到底部的路径和层为2 + 3 + 5 + 1 = 11

思路1

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
        vector<vector<int>> v(triangle);
        int row = triangle.size();
        int minPath;
        for (int i = 1; i < row; ++i)
        {
            for (int j = 0; j <= i; ++j)
            {
                if (j == 0)
                {
                    v[i][j] += v[i - 1][j]; 
                }
                else if (j == i)
                {
                    v[i][j] += v[i - 1][j - 1];
                }
                else
                {
                    v[i][j] += min(v[i - 1][j], v[i - 1][j - 1]);
                }
                //v[i][j] += triangle[i][j];
            }
        }
        minPath = v[row - 1][0];
        for (int i = 0; i < row; ++i)
        {
            minPath = min(minPath, v[row - 1][i]);
        }
        return minPath;
    }
};

思路2

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
        vector<vector<int>> v(triangle);
        int len = triangle.size();
        for (int i = len - 2; i >=0; --i)
        {
            for (int j = 0; j <= i; ++j)
            {
                v[i][j] = min(v[i + 1][j], v[i + 1][j + 1]) + v[i][j];
            }
        }
        return v[0][0];
    }
};
发布了235 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44781107/article/details/103548259