一、问题描述
在一个二维数组中,寻找是否存在一个数。二维数组的描述
- 从左到右数一次递增
- 从上到下数一次递增
例子:
1 int[][] matrix = { 2 {1, 2, 3, 4}, 3 {2, 3, 4, 5}, 4 {3, 4, 5, 6}, 5 {4, 5, 6, 7} 6 };
二、思路以及Code
1 package algorithm; 2 3 /** 4 * Created by adrian.wu on 2019/2/26. 5 */ 6 public class FindNumberInTwoDementionMatrix { 7 /* 8 1、这类题目通常是要利用规则要找到巧妙的遍历方向, 主要就是能不能想到巧妙的解题规则。 9 2、若果从右上角即matrix[0][cc-1]方向开始遍历 10 3、如果num > matrix[i][j]则num只会在matrix[i][j]的下方,则i++ 11 4、如果num < matrix[i][j]则num只会在matrix[i][j]的左侧,则j-- 12 5、因为4和5两个条件是一定会发生的,因此只要按照这两个条件去遍历矩阵就可以了, 13 */ 14 public boolean findNumberInTwoDementionMatrix(int[][] matrix, int num) { 15 if (matrix.length == 0) return false; 16 int rc = matrix.length, cc = matrix[0].length, i = 0, j = cc - 1; 17 while (i >= 0 && i < rc && j < cc && j >= 0) { 18 if (matrix[i][j] == num) return true; 19 else if (matrix[i][j] < num) i++; 20 else j--; 21 } 22 return false; 23 24 } 25 }