题目描述:
将二维数组逆时针旋转45°,可以将整个矩阵看作一个二叉搜索树,其中右上角和左下角可分别看作根节点。
左下角看作根节点:若当前值大于target则舍弃该行,若当前值小于target则舍弃该列。
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int rows = matrix.length - 1;
if(rows < 0){
return false;
}
int columns = matrix[0].length;
int j = 0;
while(rows >= 0 &&j < columns){
if(matrix[rows][j] > target){
rows--;
}else if(matrix[rows][j] < target){
j++;
}else{
return true;
}
}
return false;
}
}
右上角看作根节点:若target大于本节点则舍弃该行进入下一行,若小于target则舍弃该列进入前一列
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int rows = matrix.length - 1;
if(rows < 0){
return false;
}
int columns = matrix[0].length - 1;
int i = 0,j = columns;
while(i <= rows&&j >= 0){
if(matrix[i][j] > target){
j--;
}else if(matrix[i][j] < target){
i++;
}else{
return true;
}
}
return false;
}
}