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

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]

    一、空间复杂度O(n^2)
      一共有n行,那么所占空间为n*(n+1)/2的一维数组,从上往下填表,由于下一个值的得出需要上一个值,所以从上往下填表需要设置两个临时变量进行倒换,比较麻烦;且从上往下填表的最终结果需要在最底行中找最小值。

    二、空间复杂度O(n)
      填表是一个双重循环,在内循环中,值的得出依赖于前i个数,i最大为n,所以我们只需要重复利用O(n)空间就可以完成双循环。

    三、从下往上填表
      不需要设置两个变量倒换,可以直接覆盖之前的值;且最后的结果输出DP[0]即可。

    public class Solution {
        public int minimumTotal(List<List<Integer>> triangle) {
            int row = triangle.size();
            int[] DP = new int[row];
            for(int i = 0; i < row; i++) {
                DP[i] = triangle.get(row-1).get(i);
            }
            for(int i = row - 2; i >= 0; i--) {
                for(int j = 0; j <= i; j++) {
                    DP[j] = Math.min(DP[j], DP[j+1]) + triangle.get(i).get(j);
                }
            }
            return DP[0];
        }
    }
  • 相关阅读:
    thinkphp目录解析
    开发规范
    form
    命名空间
    类与对象
    OS知识点汇总
    C++每日一记!
    语言哲学和语言逻辑
    形式语言与自动机
    C#脚本
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713493.html
Copyright © 2011-2022 走看看