题解 | #二维数组中的查找#
二维数组中的查找
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;
      }
    }
};


