可以直接用两层for循环的蠢办法。。。。(不建议这么做,蠢)
尽可能的多利用题目中的条件。
解题思路
首先选取数组右上角的数字,
从右上角或者从左下角开始都是一样的。
代码我是从左下角开始的
注意:不能用三个并列的if(每次移动后就得判断越界)
注意边界情况:col>=0&&row<rows
package swordPointingToTheOffer;
public class four {
public static boolean findNumberIn2DArray(int[][] matrix, int target) {
//矩阵不符合正常的条件
if(matrix==null||matrix.length<=0||matrix[0].length<=0){
return false;
}
//行
int cols = matrix.length;
//列
int rows = matrix[0].length;
//从左下角开始查找
int col = cols -1;
int row = 0;
//在合理的下标范围下,做矩阵元素的查找(不能用三个并列的if(每次移动后就得判断越界))
while (col>=0&&row<rows){
if(target>matrix[col][row]){
//右移
row++;
}else if(target<matrix[col][row]){
//上移
col--;
}else {
//找到了元素
return true;
}
}
//查找不到元素的情况
return false;
}
public static void main(String[] args) {
int [][]matrix1 = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(matrix1.length); //行
System.out.println(matrix1[0].length); //列
int [][]matrix={{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}};
System.out.println(findNumberIn2DArray(matrix,20));
System.out.println("判断边界情况");
int [][]matrix3={{-5}};
System.out.println(matrix3.length); //行
System.out.println(matrix3[0].length); //列
System.out.println(findNumberIn2DArray(matrix3,-5));
}
}