用遞迴尋找有序二維數組的方法詳解_java

來源:互聯網
上載者:User
假設給定一個有序二維數組,每一行都是從左至右遞增,每一列都是從上到下遞增,如何完成一個函數,輸入這樣一個二維數組和一個整數,判斷這個整數是否在這個二維數組中。
假設一個4×4的有序二維數組:
          1          2          8          9
          2          4          9          12
          4          7          10        13
          6          8          11        15
要尋找的數字為6。
演算法的核心思想是,先取最左上方的數字9,因為9比6大,所以可以排除比9大的數字,也就是第四列,然後取8,同理排除第三列,再取2,比6小,可排除比2小的數字,也就是第一行,同理取4,排除第二行,取7,排除第二列,取4,排除第三行,取6,相等,返回true。
這裡我們用遞迴實現,代碼為:
複製代碼 代碼如下:

public class FindMatrixNumber {
 private static FindMatrixNumber instance;
 private static boolean found = false;
 public static FindMatrixNumber getInstance() {
  if (instance == null) {
   instance = new FindMatrixNumber();
  }
  return instance;
 }
 public static boolean find(int matrix[][], int number) {
  if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
   return false;
  } else {
   System.out.println("****Start finding****");
   findMatrixNumber(matrix, matrix.length, 0, matrix[0].length,
     number);
   System.out.println("*****End finding*****");
  }
  return found;
 }
 private static void findMatrixNumber(int matrix[][], int rows, int row,
   int columns, int number) {
  if (row > rows - 1)
   return;
  int cornerNumber = matrix[row][columns - 1];
  System.out.println(cornerNumber);
  if (cornerNumber == number) {
   found = true;
   return;
  } else if (cornerNumber < number) {
   findMatrixNumber(matrix, rows, ++row, columns, number);
  } else if (cornerNumber > number) {
   findMatrixNumber(matrix, rows, row, --columns, number);
  }
 }
}

測試代碼為:
複製代碼 代碼如下:

public class TestFindMatrixNumber {

 public static void main(String[] args) {
  int matrix[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
  System.out.println(FindMatrixNumber.find(matrix, 6));
 }

}

測試代碼運行結果為:
複製代碼 代碼如下:

****Start finding****
9
8
2
4
7
4
6
*****End finding*****
true

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.