标签:tar 一个 过程 比较 lock 函数 顺序 bool int
问题描述:
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
递归
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:43.9 MB, 在所有 Java 提交中击败了96.10%的用户
class Solution {
public boolean findNumberIn2DArray(int[][] array, int target) {
if(array==null || array.length==0 || array[0].length==0) {
return false;
}
int rows = array.length, cols = array[0].length;
return rec(array, new int[]{0, cols-1}, target, new boolean[rows][cols]);
}
public boolean rec(int[][] array, int[] curr, int target, boolean[][] visited) {
//target与array[curr[0]][curr[1]]比较
//大于则向右、向下;小于则向左、向上;等于则返回True
//若两个方向均已访问,则返回False
if(curr[0]<0 || curr[0]>=array.length
|| curr[1]<0 || curr[1]>=array[0].length) {
return false;
}
else if(visited[curr[0]][curr[1]]) {
return false;
}
visited[curr[0]][curr[1]] = true;
if(array[curr[0]][curr[1]]==target) {
return true;
}
else if(array[curr[0]][curr[1]]>target) {
return rec(array, new int[]{curr[0]-1, curr[1]}, target, visited)
|| rec(array, new int[]{curr[0], curr[1]-1}, target, visited);
}
else {
return rec(array, new int[]{curr[0]+1, curr[1]}, target, visited)
|| rec(array, new int[]{curr[0], curr[1]+1}, target, visited);
}
}
}
标签:tar 一个 过程 比较 lock 函数 顺序 bool int
原文地址:https://www.cnblogs.com/CodeSPA/p/13907982.html