剑指offer第二季第二题
这里我们将矩阵旋转成二叉树 如下图所示
从右上角的元素出发
1.如果num>target 那么我们需要向左查找 也就是列坐标减一
2如果num<target 那么我们需要向右查找 也就是行坐标加一
具体代码如下
public class 二维数组找目标值的问题 {
/*刷玩letcode之后的感想 可以直接把矩阵旋转 结构变成类似于平衡二叉树 这样我们通过二叉树的搜索方法 结合题目 大概可以得出
* 如下图所示
* 当target比当前节点的值小时 列索引的值减一 这样相当于我们旋转后的树向左移动
* 当target比当前节点的值大时 行索引的值加一 这样相当于我们旋转后的树向右移动*/
public static void main(String[] args) {
int[][] matrix = new int[][]{{1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30}};
boolean select = select(matrix, 18);
System.out.println(select);
}
public static boolean select(int[][] matrix,int target){
/*return null;*/
int rows =matrix.length;
int cols =matrix[0].length;
int row =0;
int col =cols-1;
int num =matrix[row][col];
while (row<=rows && col>=0){
if (target==num){
return true;
}else if(target>num){
row++;
num=matrix[row][col];
}else if (target<num){
col--;
num=matrix[row][col];
}
}
return false;
}
}