参考代码:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0) return false;
int m = 0;
int n = matrix[0].length - 1;
while (m < matrix.length && n >= 0) {
if (matrix[m][n] == target) {
return true;
} else if (matrix[m][n] > target) {
n--;
} else {
m++;
}
}
return false;
}
}
从图可以看出从15也就是右上角开始,小于15的都在15左边,大于15的都在15的下面,因此我们只需要将target与matrix[m][n]作比较,大于target的就向左移一位也就是n--,小于target的就向下移一位也就是m++。
具体实现:
先排除特殊情况: if (matrix == null || matrix.length == 0) return false;
确定循环的条件:因为是从右上角开始,所以m < matrix.length && n >= 0
循环中出现的几种情况:if (matrix[m][n] == target) return true;
if (matrix[m][n] > target) n--,大于target的就向左移一位也就是n--
if (matrix[m][n] < target) m++,小于target的就向下移一位也就是m++。