您的位置:首页 > 其它

240. Search a 2D Matrix II

2016-03-21 10:54 323 查看
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.

For example,

Consider the following 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]
]


Given target = 
5
, return 
true
.

Given target = 
20
, return 
false
.

Subscribe to see which companies asked this question

public class Solution {
int [][] a;
boolean dfs (int[][] m,int target,int i,int j){
if(m[i][j]==target)return true;
if(a[i][
4000
j]==1)return false;
a[i][j]=1;
// if(m[i][j]==target)return true;
if(i+1<m.length){
// if(m[i+1][j]==target)return true;

if(m[i+1][j]<=target){
if(dfs(m,target,i+1,j)==true)return true;
}
}
if(j+1<m[0].length){

// if(m[i][j+1]==target)return true;

if(m[i][j+1]<=target){
if(dfs(m,target,i,j+1)==true)return true;
}
}
return false;
}
public boolean searchMatrix(int[][] matrix, int target) {
a=new int[matrix.length][matrix[0].length];
// int m = -1;
// int n = -1;
// for(int i = 0;i<matrix.length;i++){
//     if(matrix[i][0]<=target&&matrix[i][matrix[0].length-1]>=target){
//         m=i;break;
//     }
// }
// if(m==-1)return false;
// for(int j=0;j<matrix[0].length;j++){
//     if(matrix[0][j]<=target&&matrix[matrix.length-1][j]>=target){
//         n=j;break;
//     }
// }
// if(n==-1)return false;
// if(matrix[m]
==target)return true;
return dfs(matrix,target,0,0);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: