期初想法,错误原因:
没有考虑到这种情况:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix[0].empty()) return false;
//重点学会这种表达
int rowSize = matrix.size(), columnSize = matrix[0].size();
for(int i=columnSize-1;i>=0;i--){//边界不要搞错
if(target==matrix[0][i])
return true;
else if(target>matrix[0][i]){
for(int j=1;j<rowSize;j++){
if(target==matrix[j][i])
return true;
}
return false;
}
}
return false;
}
};
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix[0].empty()) return false;
int rowSize = matrix.size(), columnSize = matrix[0].size();
int row = 0, column = columnSize - 1;
while(row < rowSize && column >= 0 && !matrix.empty())
{
// 从矩阵的右上角开始匹配,如果匹配到了,返回true
if(matrix[row][column] == target) return true;
// 如果值比target小,则说明这一行都比target小,row往下移一行
else if(matrix[row][column] < target) row ++;
// 如果值比target大,说明这一列都比target大,column往左移一行
else column --;
}
return false;
}
};
自行体会两种方法之间的差异,同时,要记住vector的行列的表达!!!!