재 귀적 으로 질서 있 는 2 차원 배열 을 찾 는 방법 으로 상세 하 게 설명 하 다.

2686 단어
만약 에 질서 있 는 2 차원 배열 을 지정 한다 고 가정 하면 모든 줄 은 왼쪽 에서 오른쪽으로 증가 하고 모든 열 은 위 에서 아래로 증가 하 며 하나의 함 수 를 어떻게 완성 하 는 지, 이러한 2 차원 배열 과 정 수 를 입력 하여 이 정수 가 이 2 차원 배열 에 있 는 지 판단 한다.
가설×4 의 질서 있 는 2 차원 배열:          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

좋은 웹페이지 즐겨찾기