题解 | #二维数组中的查找#
二维数组中的查找
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
既然对于每一个点,都是有相同的操作,那么必然是使用递归的方法;
接下来就是考虑递归的操作:有i,j坐标点,target目标值,原始数据,以及潜在的有效性判断因素:边界值。
递归函数的要点是:给出函数的签名式,对边界值进行判断,1:给出递归结束的终止条件;2:给出每一个步骤的细化步骤;
为了提高效率,还要考虑将递归函数,转化为非递归函数。要诀就是:
1.将递归函数的结束条件,作为非递归函数中while的条件判断依据;
2.执行各个可能的条件分支情况,并修改while中的变量;
3.返回while中的条件判断;
*
* @param target int整型
* @param array int整型vector<vector<>>
* @return bool布尔型
*/
bool Find(int target, vector<vector<int> >& array) {
// write code here
if (array.empty()) return false;
if (array[0].empty()) return false;
return Find(target, array, array.size(), 0, array[0].size()-1);
}
bool Find(int target, vector<vector<int>>& array, int rows, int i, int j) {
if (j >= 0 && i < rows) {
if (array[i][j] == target)
return true;
else if (array[i][j] < target)
return Find(target, array, rows, i+1, j);
else
return Find(target, array, rows, i, j-1);
} else {
return false;
}
}
};
查看20道真题和解析