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. MyBatis 对数据库进行CRUD操作

    1.update修改 uodate修改也可以使用之前的机制在配置文件中直接编写sql 但是update语句的set字句中是根据传入的值决定的, 此时可以通过Mybatis提供的标签实现判断动态拼接up ...

  2. JavaScript和HTML DOM的区别与联系

    JavaScript和HTML DOM的区别与联系 区别: javascript JavaScript 是因特网上最流行的浏览器脚本语言.很容易使用!你一定会喜欢它的! JavaScript 被数百万 ...

  3. static--Android静态变量使用陷阱

     相关资料:http://blog.csdn.net/ctcwri/article/details/8858414                     http://blog.csdn.net/w ...

  4. springMVC的执行流程和完整代码

    一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面,是一个强大灵活的 Web 框架.Spring ...

  5. [UE4]解决角色影子的问题

    一.自己应该是不能看到第一人称模型的影子,只要将第一人称模型影子不投影的就可以了.Cast Shadow勾选去掉就不会有影子了. 二.在第一人称视角中,枪支也是不应该有投影的.在weanpon中新增2 ...

  6. 获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段

    获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段 public function getMembership(){ //加入会员s_id = 1 $busines ...

  7. Android给TextView设置多个字体颜色

    效果如下:

  8. vue vue-resource 请求数据

    main.js import Vue from 'vue'; import App from './App.vue'; /*使用vue-resource请求数据的步骤 1.需要安装vue-resour ...

  9. SCCM 2012 R2实战系列之三:独立主站点部署

    3.1 SCCM 2012 R2主站点的安装 SCCM 2012 R2跟以前的SCCM 2007不同的是多了一个管理中心站点的角色, 管理中心站点主要负责SCCM管理控制和报表查看. 主站点跟以往的S ...

  10. 第七章 :分布式监控与SNMP监控

    7.1 分布式监控 7.1.1 作用 分担压力,减轻负载 多机房监控 zabbix Server  ===>  zabbix agent (只能同一个局域网监控) 分担压力,降低负载 zabbi ...