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

     1 class Solution {
     2     int min(int []n)
     3     {
     4         if(n.length<1)return 0;
     5         int r=n[0];
     6         for(int i=1;i<n.length;++i)
     7         {
     8             r=Math.min(r,n[i]);
     9         }
    10         return r;
    11     }
    12     public int minimumTotal(List<List<Integer>> triangle) {
    13         if(triangle.size()<1)return 0;
    14         int []last=new int[1]; 
    15         last[0]=triangle.get(0).get(0).intValue(); //第一行不用算就是第一个元素
    16         for(int row=1;row<triangle.size();++row)//从第二行开始
    17         {
    18             List<Integer> line=triangle.get(row);
    19             int []cur=new int[line.size()];
    20             cur[0]=last[0]+line.get(0).intValue(); //首尾值比较特殊只能是上一行的最左/右值加上这行的最左/右值
    21             cur[line.size()-1]=last[line.size()-2]+line.get(line.size()-1).intValue();
    22             
    23             for(int i=1;i<line.size()-1;++i)//循环本行的中间部分, 去掉最左和最右
    24             {
    25                 cur[i]=line.get(i).intValue()+Math.min(last[i-1],last[i]); //本行第i个数可以和上一行的i-1或者i进行相加,所以取min的情况
    26             }
    27             last=cur;
    28         }
    29         return min(last);//不知道java 有没有库函数可以直接算数组最小值的...只能自己写一个
    30     }
    31 }

    三角形查找和最小/大的路径.

    要么暴力运算,要么就是用dp.

    这题的话dp其实和暴力运算差不多的,其实就是用数组来储存上一行的结果,和上楼梯的题目类似.

  • 相关阅读:
    0302思考并回答一些问题
    0104 自下而上
    1203 有穷自动机的构造
    11 10我的评论
    1029 C语言文法翻译(2)
    1014 对编译程序的心得与总结
    我们小组的编译程序
    0921 词法分析程序
    0909 关于编译原理的思考
    数据库设计之数据库设计三大范式
  • 原文地址:https://www.cnblogs.com/lychnis/p/10668097.html
Copyright © 2011-2022 走看看