首页 > 编程语言 > 详细

《剑指offer》—— 二维数组中的查找

时间:2020-09-19 13:25:48      阅读:43      评论:0      收藏:0      [点我收藏+]

点我查看原题
点我查看原文

题目描述

在一个 $n * m$ 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路

  • 暴力写法:

    1. 直接遍历,从头开始找直到匹配目标值;
    2. 从左上角开始递归,如果当前值 小于 目标值,那么往 右边 / 下边 走,直到匹配目标值。
  • 巧妙写法:

    1. 从右上角开始递归,如果当前值 小于 目标值,那么往 下边 走,如果当前值 大于 目标值,那么往 左边 走;
    2. 从右上角开始循环,逻辑同上。

示例代码

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var findNumberIn2DArray = function(matrix, target) {
    const helper = (x, y) => {
        if (x === height || y < 0) {
            return false
        }
        if (matrix[x][y] === target) {
            return true
        }
        // 如果当前值小于目标值,那么往下边走
        if (matrix[x][y] < target) {
            return helper(x + 1, y)
        }
        // 否则往左边走
        return helper(x, y - 1)
    }
    if (!matrix.length) {
        return false
    }
    let width = matrix[0].length
    let height = matrix.length
    return helper(0, width - 1)
};

搜索「tony老师的前端补习班」关注我的微信公众号,那么就可以第一时间收到我的最新文章。
技术分享图片

《剑指offer》—— 二维数组中的查找

原文:https://www.cnblogs.com/pigpigever/p/13695345.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!