在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
先看一下我的错误代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target)
{
if(matrix.length==0||matrix[0].length==0||matrix==null)
{
return false;
}
int rows=matrix.length;
int columns=matrix[0].length;
int row=0;
int column=columns-1;
while(row<rows && column>=0)
{
if(matrix[row][column]==target)
{
return true;
}
if(matrix[row][column]>target)
{
column--;
}
//错误点进入一次循环的时候行列数应该是固定的
//如果执行第二个if语句后column会改变列数会变化
//会对下面的if产生影响
//所以在开始的时候要保存行列数的值
if(matrix[row][column]<target)
{
row++;
}
}
return false;
}
}
修改以后的
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target)
{
if(matrix.length==0||matrix[0].length==0||matrix==null) {
return false;
}
int rows=matrix.length;
int columns=matrix[0].length;
int row=0;
int column=columns-1;
while(row<rows && column>=0)
{
int temp=matrix[row][column]; if(temp==target)
{
return true;
}
if(temp>target)
{
column--;
}
if(temp<target)
{
row++;
}
}
return false;
}
}