zoukankan      html  css  js  c++  java
  • leetcode 120. Triangle

    最简单的思路: 深度遍历,得到所有的可能,找最小的结果

    • 深度遍历时,每次计算左边,与右边的值。
    class Solution {
    public:
        void triangleGet(vector<vector<int>> triangle, vector<int> &result, int sum, int x, int y)
        {
            if(y==triangle.size()-1)
            {
                result.push_back(sum);
                return;
            }
            triangleGet(triangle, result, sum+triangle[y+1][x],x,y+1);
            if(x<triangle[y+1].size()-1)
            triangleGet(triangle,result, sum+triangle[y+1][x+1],x+1, y+1);
            
        }
        
        
        int minimumTotal(vector<vector<int>>& triangle) {
            if(triangle.size()==0)
                return 0;
            vector<int> result;
            triangleGet(triangle, result, triangle[0][0], 0,0);
            sort(result.begin(),result.end());
            return result[0];
        }
    };
    

      有两个样例不能通过,时间复杂度太高。。

    考虑动态规划求解:记录每一层的结果,来计算下一层。

    从底往上进行计算:

    到达当前位置的最小值

    class Solution {
    public:
       
        int minimumTotal(vector<vector<int>>& triangle) {
            vector<vector<int>> dp(triangle.size(), vector<int>(triangle.size(),0));
            
            for(int j=triangle[triangle.size()-1].size()-1;j>=0;j--)
            {
                dp[triangle.size()-1][j]=triangle[triangle.size()-1][j];
    
            }
            
          for(int i=triangle.size()-2;i>=0;i--)
          {
              for(int j=0;j<triangle[i].size();j++)
              {
                  cout<<dp[i+1][j+1]<<"   "<<dp[i+1][j]<<endl;
                  dp[i][j]=min(dp[i+1][j+1],dp[i+1][j])+triangle[i][j];
    
              }
          }
           return dp[0][0]; 
            
            
        }
    };
    

      

  • 相关阅读:
    结对编程之附加题:单元测试
    机器学习第二次作业
    第一次作业
    机器学习第二次作业
    机器学习第一次个人作业
    软工实践个人总结
    第08组 Beta版本演示
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
    第08组 Beta冲刺(3/5)
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7402323.html
Copyright © 2011-2022 走看看