经典dp....

可以不用extra空间的,既然要求只能用O(n)...那估计想考滚动数组吧

那就那么写吧。。。

 

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
        int n = triangle.size();
        if(n == 0) return 0;
        int m = triangle[n - 1].size();
        vector<vector<int> > f(2 , vector<int>(m , INT_MAX));
        
        int mark = 0;
        f[mark][0] = triangle[0][0];
        mark ++; mark = mark %= 2;
        for(int i = 1 ; i < n ; i++){
            int len = triangle[i].size();
            f[mark][0] = f[(mark+1)%2][0]  + triangle[i][0];
            for(int j = 1 ; j < len ; j++){
                f[mark][j] = min(f[(mark+1)%2][j-1] , f[(mark+1)%2][j]) + triangle[i][j];
            }
            mark++; mark %= 2;
        }
        mark++;mark %= 2;
        int ans = INT_MAX;
        for(int i = 0 ; i < m ; i++)
            ans = min(ans , f[mark][i]);
            
        return ans;
    }
};

 

相关文章:

  • 2022-01-18
  • 2021-11-25
  • 2022-12-23
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-02
  • 2021-07-09
  • 2022-03-02
  • 2022-01-31
  • 2021-08-02
  • 2021-12-22
  • 2022-03-07
相关资源
相似解决方案