(十一)二维矩阵中找数

一、问题描述

在一个二维数组中,寻找是否存在一个数。二维数组的描述

  • 从左到右数一次递增
  • 从上到下数一次递增

例子:

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 }

猜你喜欢

转载自www.cnblogs.com/ylxn/p/10436916.html
今日推荐