这道题的解法核心就是:从右上角不断搜索。
若 matrix[row][col] == target 则return true;
若 matrix[row][col] > target,则向该数字的左方继续搜索,即col--;
若 matrix[row][col] < target,则向该数字的下方继续搜索,即row++;
这样子做的原因是数组的每行每列都是有序的,这样子可以很容易的缩小查找范围。当然也可以使用二分法继续加快速的。
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix.size() == 0 || matrix[0].size() == 0){
return false;
}
int n = matrix.size();
int m = matrix[0].size();
int row = 0;
int col = m-1;
while(row < n && col >= 0){
if(matrix[row][col] == target){
return true;
}else if(matrix[row][col] > target){
col--;
}else{
row++;
}
}
return false;
}
};