Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

정사각형 행렬 JavaScript의 나선형 요소

<시간/>

다음과 같은 리터럴 배열의 2차원(반드시 정사각 행렬) 배열을 취하는 JavaScript 함수를 작성해야 합니다. -

const arr = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

이 함수는 (0, 0) 위치에서 시작하여 입력 배열에서 나선형으로 요소를 가져와서 해당 1차원 배열을 반환하는 새 배열을 생성해야 합니다.

따라서 이 배열의 나선은 다음과 같아야 합니다. -

const output = [1, 2, 3, 6, 9, 8, 7, 4, 5];

시작과 끝 모두에서 현재 행과 현재 열을 가리키는 임시 변수를 생성합니다.

그렇게 하면 행렬의 중심을 향해 나선형으로 시작 행과 시작 열을 반복적으로 증가시키고 끝 행과 끝 열을 감소시킬 수 있습니다.

예시

const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
const spiral = (arr = []) => {
   if (!arr || arr.length === 0) {
      return [];
   };
   let startRow = 0;
   let startCol = 0;
   let res = [];
   let endCol = arr[0].length - 1;
   let endRow = arr.length - 1;
   while (startRow <= endRow && startCol <= endCol) {
      for (let i = startCol; i <= endCol; i++) {
         res.push(arr[startRow][i]);
      }
      startRow++;
      for (let i = startRow; i <= endRow; i++) {
         res.push(arr[i][endCol]);
      }
      endCol--;
      if (startRow <= endRow) {
         for (let i = endCol; i >= startCol; i--) {
            res.push(arr[endRow][i]);
         }
         endRow--;
      }
      if (startCol <= endCol) {
         for (let i = endRow; i >= startRow; i--) {
            res.push(arr[i][startCol]);
         } startCol++;
      }
   }
   return res;
};
console.log(spiral(arr));

출력

콘솔의 출력은 -

[
   1, 2, 3, 6, 9,
   8, 7, 4, 5
]