/*对于矩阵而言,每个位置只有三种状态,大于target,小于target,等于target
大于:往左边走
小于:看右边能不能走,能走就往右走,不能走就往上走
等于:返回 true
*/
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
//总体思路:该位置值小于target,判断j+1是否满足要求,满足往右走,不满足往下走
//该位置大于target,往左走
//该位置等于target,return true
int m=matrix.size(),n=matrix[0].size();
int i=0,j=0;
while(i>=0&&i<m&&j>=0&&j<n)
{
if(matrix[i][j]<target)
{
if(j<n-1)
{
if(matrix[i][j+1]==target)return true;
if(matrix[i][j+1]<target)++j;
else ++i;
}
else ++i;
}
else if(matrix[i][j]>target) --j;
else return true;
}
return false;
}
};