当前位置: 首页 > news >正文

LeetCode -- Triangle

题目描述:


Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.


For example, given the following triangle
[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).


求三角形从上到下构成最小值的和的路径。


思路:
1.使用一个辅助的二维数组保存当前[i,j]的最小和,再遍历一次最后一层的值从而得到最小值。
2.在求和过程中,区分收尾字符和中间字符的情况。


假设arr[i,j]来保留第i行第j列的最小和。则:
arr[0,0] = triangle[0,0];
当j为中间元素:
arr[i,j] = Min(arr[i-1,j], arr[i-1,j-1]) + triangle[i,j]
当j为首元素:
arr[i,0] = arr[i-1,0] + triangle[i,0]
当j为末尾元素:
arr[i,count-1] = arr[i-1,count-2] + triangle[i,count-1]




实现代码:

public class Solution {
    public int MinimumTotal(IList<IList<int>> triangle) 
    {
       if(triangle.Count == 0){
    		return 0;
    	}
    	
    	if(triangle.Count == 1){
    		return triangle[0][0];
    	}
    	
    	var arr = new int[triangle.Count, triangle[triangle.Count - 1].Count];
    	arr[0,0] = triangle[0][0];
    	
    	for(var i = 1;i < triangle.Count; i++)
    	{
    		var current = triangle[i];
    		
    		arr[i,0] = current[0] + arr[i-1,0];
    		for(var j = 1;j < current.Count - 1; j++)
    		{
    			arr[i,j] = current[j] + Math.Min(arr[i-1,j],arr[i-1,j-1]);
    		}
    		arr[i,current.Count-1] = current[current.Count-1] + arr[i-1,current.Count-2];
    	}
    	
    	var len = arr.GetLength(1);
    	var min = arr[len - 1,0];
    	for(var i = 1;i < len; i++){
    		if(min > arr[len - 1,i]){
    			min = arr[len - 1,i];
    		}
    	}
    	
    	return min;
    }




}


相关文章:

  • Nebula3中的骨骼动画: Animation子系统
  • LeetCode -- Ugly Number II
  • LeetCode -- Ugly Number
  • vim 显示行号、语法高亮、自动缩进的设置
  • LeetCode -- Linked List cycle
  • 根据textbox中的值,改变dropdownlist的选项
  • LeetCode -- Basic Calculator II
  • 完整SQL分页存储过程(支持多表联接)
  • LeetCode -- Bitwise AND of Numbers Range
  • C 符号列表
  • LeetCode -- Linked List Cycle II
  • LeetCode -- LRU Cache
  • [Web 开发] 定制IE下载对话框的按钮(打开/保存)
  • LeetCode -- Min Stack
  • SQL2005CLR函数扩展-繁简转换
  • 自己简单写的 事件订阅机制
  • [译] 怎样写一个基础的编译器
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【EOS】Cleos基础
  • 【mysql】环境安装、服务启动、密码设置
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • ES6系统学习----从Apollo Client看解构赋值
  • go append函数以及写入
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Redux 中间件分析
  • Vim Clutch | 面向脚踏板编程……
  • Vue全家桶实现一个Web App
  • 爱情 北京女病人
  • 高程读书笔记 第六章 面向对象程序设计
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 强力优化Rancher k8s中国区的使用体验
  • 容器服务kubernetes弹性伸缩高级用法
  • 原生js练习题---第五课
  • 再次简单明了总结flex布局,一看就懂...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 整理一些计算机基础知识!
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​虚拟化系列介绍(十)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (30)数组元素和与数字和的绝对差
  • (ibm)Java 语言的 XPath API
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。