public class Solution
{
bool[,] tags;//用于标记是否已经访问过,false未访问,true已访问
int[,] records;//用于标记以当前为起点的最长升序列长度(上下左右四向最长的) private int MaxOfFour(int a, int b, int c, int d)
{
return Math.Max(Math.Max(a, b), Math.Max(c, d));
} private int GetLongestFromPoint(int[,] matrix, int i, int j, int prenum)
{
var row = matrix.GetLength();
var column = matrix.GetLength(); if (i < || i >= row || j < || j >= column)
{
//坐标不合法
return ;
} var curnum = matrix[i, j];//当前坐标
if (prenum >= curnum)
{
return ;
}
else
{
if (tags[i, j])//当前节点已经访问,直接返回结果
{
return records[i, j];
} //当前节点尚未访问过
tags[i, j] = true;//当前节点未访问,将当前节点标记为已经访问 //向上
var maxup = ;
var up_i = i - ;
var up_j = j;
if (up_i >= )
{
maxup = GetLongestFromPoint(matrix, up_i, up_j, curnum);
} //向下
var maxdown = ;
var down_i = i + ;
var down_j = j;
if (down_i < row)
{
maxdown = GetLongestFromPoint(matrix, down_i, down_j, curnum);
} //向左
var maxleft = ;
var left_i = i;
var left_j = j - ;
if (left_j >= )
{
maxleft = GetLongestFromPoint(matrix, left_i, left_j, curnum);
} //向右
var maxright = ;
var right_i = i;
var right_j = j + ;
if (right_j < column)
{
maxright = GetLongestFromPoint(matrix, right_i, right_j, curnum);
} var max = + MaxOfFour(maxup, maxdown, maxleft, maxright);
records[i, j] = max;//标记当前节点的最大升序列长度
return max;
}
} public int LongestIncreasingPath(int[,] matrix)
{
var row = matrix.GetLength();
var column = matrix.GetLength();
if (row == && column == )
{
return ;
}
tags = new bool[row, column];
records = new int[row, column];
for (int i = ; i < row; i++)
{
for (int j = ; j < column; j++)
{
tags[i, j] = false;
records[i, j] = ;
}
}
int maxlen = ;//用于记录全局最长升序列长度 for (int i = ; i < row; i++)
{
for (int j = ; j < column; j++)
{
if (!tags[i, j])//当前节点还没有计算过
{
GetLongestFromPoint(matrix, i, j, matrix[i, j] - );
}
maxlen = Math.Max(maxlen, records[i, j]);//更新全局最大升序列长度
}
} return maxlen;
}
}

leetcode329的更多相关文章

  1. [Swift]LeetCode329. 矩阵中的最长递增路径 | Longest Increasing Path in a Matrix

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

随机推荐

  1. VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版

    http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...

  2. Ubuntu 14.10 下使用IDEA开发Spark应用

    1 环境准备 1.1 下载IDEA,可在官网下载 1.2 IDEA与Eclipse有点不同,IDEA中的New Projects相当于Eclipse中的workspace,New Module才是新建 ...

  3. Spring-framework应用程序启动loadtime源码分析笔记(一)

    1,实例化DefaultListableBeanFactory DefaultListableBeanFactory是AnnotationConfigApplicationContext的组件,Def ...

  4. spring4.3新注解之:@RequestMapping变种(@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping)

    Spring 4.3 中引进了下面的注解 @RequestMapping 在方法层级的变种,来帮助简化常用 HTTP 方法的映射,并更好地表达被注解的方法的语义.比如,@GetMapping可以读作 ...

  5. 关于解决logging模块写出的日志信息重复的问题

    一般情况下,我们在利用logging模块记录日志的时候,往往会利用下面这种方式进行日志信息的记录: import logging def logger_file(): #生成logger对象 whw_ ...

  6. 事件之onTouch方法的执行过程 及和 onClick执行发生冲突的解决办法

    转载:http://blog.csdn.net/jiangwei0910410003/article/details/17504315#quote 博主推荐: 风萧兮兮易水寒,“天真”一去兮不复还.如 ...

  7. idea关闭标签快捷键修改----兼 常用实用快捷键

    还有一个快捷键: 自动补全返回值 : ctrl + alt + v alt + enter: 自动添加未定义的方法 idea 原本的关闭快捷键是: ctrl + F4,但是不好用,谁的手指伸这么长 修 ...

  8. AsyncHelper

    http://www.cnblogs.com/zhaopei/p/async_one.html

  9. Codeforces-Educational Codeforces Round 53题解

    写之前,先发表下感慨:好久没写题解了,也许是因为自己越来越急利了,也可以说是因为越来越懒了. A. Diverse Substring 直接找一找有没有相邻的两个不同的字符即可. B. Vasya a ...

  10. (转)C#.NET WINFORM应用程序中控制应用程序只启动一次

    原文地址 :http://www.cnblogs.com/emanlee/archive/2009/08/31/1557379.html using System; using System.Thre ...