这个题,跟之前做的一道找kth element in 2 sorted array 神似。都是每次去除1/4 。
这一个去除部分更好理解一些。
有一点容易出错,假如我们要去除左上角,
-----
-----
|
|
|
|
-----
------
|
|
|
|
-----------
红线是保留部分的边界,inclusive.
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix == null || matrix.length == 0|| matrix[0] == null || matrix[0].length == 0)
return false;
return helper(matrix,target,0,matrix.length-1,0,matrix[0].length-1);
}
public boolean helper(int[][] matrix, int target, int row_start, int row_end, int col_start, int col_end){
if(row_start > row_end || col_start > col_end){
return false;
}
int row_mid = (row_start + row_end)/2;
int col_mid = (col_start + col_end)/2;
if(matrix[row_mid][col_mid] == target){
return true;
}
if(matrix[row_mid][col_mid] < target){
return helper(matrix, target, row_start, row_end, col_mid+1,col_end) || helper(matrix, target, row_mid+1,row_end,col_start, col_mid);
}else{
return helper(matrix, target, row_start, row_end, col_start,col_mid-1) || helper(matrix, target, row_start,row_mid-1,col_mid,col_end);
}
}
}