1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public boolean searchMatrix(int[][] matrix, int target) { if(matrix.length==0||matrix[0].length==0) return false; int m=matrix.length; int n=matrix[0].length; return help(matrix,0,n-1,0,m-1,target); } public boolean help(int[][] matrix,int left,int right,int top,int button,int target){ //System.out.println(left+"+"+right+"+"+top+"+"+button); if(left<0||right>=matrix[0].length||top<0||button>=matrix.length||left>right||top>button) return false; if(left==right&&top==button) return (matrix[top][right]==target); if(right-left==1&&button-top==1) return matrix[top][left]==target||matrix[top][right]==target||matrix[button][left]==target||matrix[button][right]==target; if(right-left==1&&button==top) return matrix[top][left]==target||matrix[top][right]==target; if(button-top==1&&right==left) return matrix[button][left]==target||matrix[top][left]==target; int midi=(top+button)/2; int midj=(left+right)/2; //System.out.println(midi+"+"+midj); if(matrix[midi][midj]==target) return true; else if(matrix[midi][midj]>target){ boolean t=help(matrix,left,midj,top,midi,target); if(t) return true; if(matrix[midi][left]<=target) t=help(matrix,left,midj-1,midi+1,button,target); if(t) return true; if(matrix[top][midj]<=target) t=help(matrix,midj+1,right,top,midi-1,target); if(t) return true; } else if(matrix[midi][midj]<target){ boolean t=help(matrix,midj,right,midi,button,target); if(t) return true; if(matrix[button][midj]>=target) t=help(matrix,left,midj-1,midi+1,button,target); if(t) return true; if(matrix[midi][right]>=target) t=help(matrix,midj+1,right,top,midi-1,target); if(t) return true; } return false; } }
|