검 지 offer - JavaScript (19) 시계 방향 으로 행렬 인쇄

1776 단어
시계 방향 인쇄 매트릭스
제목 설명
행렬 을 입력 하고 외 향 에서 시계 방향 으로 순서대로 모든 숫자 를 출력 한다. 예 를 들 어 다음 과 같은 행렬 을 입력 하면 1, 2, 3, 4, 8, 16, 15, 14, 13, 9, 9, 10, 6, 7, 11, 10.
사고의 방향
  • 좌 표를 (0, 0) 로 선택 하고 (1, 1)... 의 점 은 (start, start) 로 기록 하 며 시작 좌표 로 다음 바퀴 의 시작 좌 표 는 (start + 1, start + 1) 이다.
  • 다음 바퀴 에 들 어 갈 지 여 부 를 판단 하 는 조건 은 rows > start * 2 & & cols > start * 2 이다.
  • 한 바퀴 인쇄 된 왼쪽 상단 좌 표 는 (start, start) 이 고 오른쪽 아래 좌 표 는 (cols - start - 1, rows - start - 1)
  • 이다.
  • 한 바퀴 왼쪽 상단 과 오른쪽 하단 좌표 에 따라 '왼쪽 에서 오른쪽으로', '위 에서 아래로', '오른쪽 에서 왼쪽으로', '아래 에서 위로' 인쇄 해 야 할 점 을 판단 한다.

  • 구현 코드
    function printMatrix(matrix) {
        if (matrix == null || matrix.length == 0) {
            return;
        }
        var rows = matrix.length;
        var cols = matrix[0].length;
        var start = 0;
        var result = [];
    
        while (cols > start * 2 && rows > start * 2) {
            var endX = cols - 1 - start;
            var endY = rows - 1 - start;
            //        
            for (var i = start; i <= endX; i++) {
                result.push(matrix[start][i]);
            }
            //        
            if (start < endY) {
                for (var i = start + 1; i <= endY; i++) {
                    result.push(matrix[i][endX]);
                }
            }
            //        
            if (start < endX && start < endY) {
                for (var i = endX - 1; i >= start; i--) {
                    result.push(matrix[endY][i]);
                }
            }
            //        
            if (start < endX && start < endY - 1) {
                for (var i = endY - 1; i >= start + 1; i--) {
                    result.push(matrix[i][start]);
                }
            }
            start++;
        }
        return result
    }
    

    좋은 웹페이지 즐겨찾기