回溯:找出最大路径的递增路径

题目https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2?tpId=295&tqId=1076860&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
首先想到的就是回溯,类似于迷宫问题,但是还是想不出来怎么写,有待加强。
定义一个max,找出n、m。开始循环遍历整个矩阵。循环体就是dfs深搜方法体,但是需要对每次结果记录最大的max值最后返回。
在深搜方法中首先加入数组mar,下标i、j,还有上一次遍历到的值pre。
首先深搜结束条件,如果当前遍历到的值小于pre,那么直接返回,也就是这条路行不通。
定义max,每次都需要刷新,然后上下左右开始遍历,但是pre的值要注意,当前遍历的要赋值给pre当做下一次的判断条件即可,最后返回max。
图片说明

package com.kuang.reflection;

import java.util.*;

public class Test07 {
    public int solve (int[][] matrix) {
        int max = 0;
        int n = matrix.length;;
        int m = matrix[0].length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                max = Math.max(max,dfs(matrix,i,j,-1));
            }
        }
        return max;
    }
    public int dfs(int[][] matrix,int i,int j,int pre){
        if(matrix[i][j] <= pre) {
            return 0;
        }

        int max = 0;
        if(i > 0){
            max = Math.max(max, dfs(matrix, i - 1, j, matrix[i][j]));
        }
        if(j > 0){
            max = Math.max(max, dfs(matrix, i, j - 1, matrix[i][j]));
        }
        if(i < matrix.length - 1){
            max = Math.max(max, dfs(matrix, i + 1, j, matrix[i][j]));
        }
        if(j < matrix[i].length - 1){
            max = Math.max(max, dfs(matrix, i, j + 1, matrix[i][j]));
        }
        return max + 1;

    }

}
全部评论
典型的算法题啊
点赞 回复 分享
发布于 2022-07-30 17:03

相关推荐

可以不说话:笔试a了3道半,今天说是挂了😭😭
投递汇丰科技等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务