美文网首页
三角形数组找最小和

三角形数组找最小和

作者: 小码弟 | 来源:发表于2018-11-06 11:30 被阅读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];
    }
    

    相关文章

      网友评论

          本文标题:三角形数组找最小和

          本文链接:https://www.haomeiwen.com/subject/bukexqtx.html