leetcode 二维矩阵查找

从矩阵右上角出发,若目标小于当前所指,那么向右找值更小的,列数-1;若目标大于当前所指,那么行数加一,向下找值更大的。本质还是以行为中心查找。

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.empty()||matrix[0].empty())
            return false;
        int rowsize=matrix.size();
        int columnszie=matrix[0].size();
        int row=0,column=columnszie-1;
        while(row<rowsize&&column>=0)
        {
            if(matrix[row][column]==target)
                return true;
            else if(matrix[row][column]<target)
                row++;
            else
                column--;
        }
        return false;
    }
};

还有DFS解答方法,内存占用大

class Solution {
public:
    int m,n;
    int N=999999;

    bool dfs(vector<vector<int>>& matrix,int i,int j,int target)
    {
        
        if(i<0||i>=m||j<0||j>=n) return false;
        if(matrix[i][j]==N) return false;
        //搜到已经经过的比target小的元素,设为N,标记
        if(matrix[i][j]==target) return true;
        if(matrix[i][j]>target) return false;
        matrix[i][j]=N;
        bool x=dfs(matrix,i,j+1,target);
        bool y=dfs(matrix,i+1,j,target);
        //向下寻找,向右寻找,向数更大的方向寻找,从(0,0)出发肯定存在一条路径,该条路径上所有点都比
        //target小,(由矩阵特点可知)
        return x||y;
    }

    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        m=matrix.size();
        if(m==0)
        return false;
        n=matrix[0].size();
        if(n==0) 
        return false;
        return dfs(matrix,0,0,target);
        //从0开始递归
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值