這道題的解法核心就是:從右上角不斷搜索。
若 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;
}
};