1、从左上角开始 递归
bool searchMatrix(vector<vector<int>>& matrix, int target,int u,int d,int l,int r) {
if (u > d || l > r)
return false;
else if (u == d && l == r && matrix[u][l] == target)
return true;
int i=u, j=l;
while (i <=d && j <=r) {
if (matrix[i][j] < target) {
i++; j++;
}
else if (matrix[i][j] == target)
return true;
else
break;
}//ij为第一个比target大的坐标 可能越界
if(searchMatrix(matrix, target, i, d, l, j - 1))
return true;
if(searchMatrix(matrix, target, u, i-1, j, r))
return true;
return false;
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
return searchMatrix(matrix, target, 0, matrix.size()-1, 0,matrix[0].size()-1);
}
2、从左下角开始
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int i = m - 1, j = 0;
while (i >= 0 && j < n) {
if (matrix[i][j] > target) {
i--;
}
else if (matrix[i][j] < target) {
j++;
}
else {
return true;
}
}
return false;
}
第二种方法参考力扣官方题解,太巧妙了。看完感觉自己是个大傻子,怎么漏了这么简单的方法。