三角形数组找最小和

2018-11-06  本文已影响0人  小码弟

形如:
[
[1],
[2,3],
[4,5,6],
[7,8,9,10]
]
的三角形数组,求从自上而下的路径累加和中最小的数,如上例就是1->2->4->7 == 14,只能上下相邻的数相加

动态规划,自顶向下分析,自底向上计算

int getMinSum(vector<vector<int>> triangle)
{
  if(triangle.size() == 0)
    return 0;
  int rows = triangle.size();
  vector<vector<int>> minsum(rows);
  for(int j = 0; j <rows; ++j)
    {
      vector<int> temp(j+1);
      minsum.push_back(temp);
    }

  // 初始化最低一层
  for(int j = 0; j<rows; j++)
    minsum[rows-1][j] = triangle[rows-1][j];
  // 自底向上保存最小值
  for(int row = rows-2; row>=0; --row)
    for(int col = 0; col<minsum[row].size(); ++col)
      {
        int min = minsum[row+1][col]<minsum[row+1][col+1]?
                  minsum[row+1][col]:minsum[row+1][col+1];
        minsum[row][col] = min + triangle[row][col];
      }
    return minsum[0][0];
}
上一篇 下一篇

猜你喜欢

热点阅读