Advertisement
viligen

spiralMatrix

May 24th, 2022
697
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function myFunc(rows, cols) {
  2.    
  3.     maxNum = rows * cols;
  4.     let field = new Array(rows);
  5.     for (let i = 0; i < rows; i++) field[i] = new Array(cols);
  6.  
  7.     let numsArr = [];
  8.     for (let i = 1; i <= maxNum; i++) {
  9.         numsArr.push(i);
  10.     }
  11.  
  12.     let topRow = 0,
  13.         leftCol = 0,
  14.         rightCol = cols - 1,
  15.         bottomRow = rows - 1;
  16.     let idx = 0;
  17.  
  18.     while (true) {
  19.         // top row
  20.         for (let c = leftCol; c <= rightCol; c++) {
  21.             field[topRow][c] = numsArr[idx];
  22.             idx++;
  23.         }
  24.         topRow++;
  25.         if (topRow > bottomRow) {
  26.             break;
  27.         }
  28.  
  29.         // right col
  30.         for (let r = topRow; r <= bottomRow; r++) {
  31.             field[r][rightCol] = numsArr[idx];
  32.             idx++;
  33.         }
  34.         rightCol--;
  35.         if (rightCol < leftCol) {
  36.             break;
  37.         }
  38.  
  39.         // bottomRow
  40.         for (let c = rightCol; c >= leftCol; c--) {
  41.             field[bottomRow][c] = numsArr[idx];
  42.             idx++;
  43.         }
  44.         bottomRow--;
  45.         if (bottomRow < topRow) {
  46.             break;
  47.         }
  48.  
  49.         // leftCol
  50.         for (let r = bottomRow; r >= topRow; r--) {
  51.             field[r][leftCol] = numsArr[idx];
  52.             idx++;
  53.         }
  54.         leftCol++;
  55.         if (leftCol > rightCol) {
  56.             break;
  57.         }
  58.     }
  59.  
  60.     for (let i = 0; i < field.length; i++) {
  61.         console.log(field[i].join(" "));
  62.     }
  63. }
  64.  
  65. myFunc(5, 5);
  66.  
Advertisement
RAW Paste Data Copied
Advertisement