Задача:
Вам предоставляется 2D-матрица размером n x n, представляющая изображение.
Поверните изображение на 90 градусов (по часовой стрелке).

Ввод: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Ожидаемый результат: [[7, 4, 1], [8, 5, 2] , [9, 6, 3]]

Вот наш стартовый код ниже:

var rotate = function(matrix) {

};

Что мы знаем:
1. Нам нужно пройти по массиву
2. В каждом массиве нам нужен внутренний цикл для захвата каждого значения
3. Когда мы захватываем одно значение, мы немедленно поместим это значение в соответствующий индекс - для этого у нас будет отслеживающая переменная, которая отслеживает длину нашей матрицы и уменьшает ее по мере размещения каждого значения
4. Когда оба цикла завершены, верните матрицу (leetcode этого не требует, но всегда приятно видеть готовый продукт!)

Доска, чтобы найти образец этого решения:

На (красивой) диаграмме выше вы можете увидеть очевидную закономерность, в которой мы извлекаем значения из первого набора массивов, а затем отменяем сдвиг этого значения в последний набор массивов.

var rotate = function(matrix) {
  // iterate through array
  for (var i = 0; i <= matrix.length-1; i++) {
  // keeps track of our matrix length inside of inner loop
  var tracker = matrix.length-1;
  
    // inner loop that starts at the end of the matrix length
    for (var j = matrix.length-1; j >= 0; j--) {
      // assigns the popped value to current
      var current = matrix[i].pop();
      // unshifts the valued assigned to current to the first position of last array
      matrix[tracker].unshift(current);
      // decrement tracker after each j iteration
      tracker--;
    }
  }
  return matrix;
};

Сложно добавлять комментарии без цветов в блоке кода, поэтому вот визуальное представление наших итераций:

i - j - трекер - матрица - - - - - - - - - - всплывающее значение
i: 0 j: 2 tacker: 2 [[1, 2], [4, 5, 6], [7, 8, 9]] ток: 3
i: 0 j: 1 закрепитель: 1 [[1], [4, 5, 6], [3, 7, 8, 9]] ток: 2
i: 0 j: 0 закрепитель: 0 [[], [2, 4, 5, 6], [3, 7, 8, 9]] текущий: 1
i: 1 j: 2 закрепитель: 2 [[1], [2, 4, 5], [3, 7, 8, 9]] текущее: 6
i: 1 j: 1 связка: 1 [[1], [2, 4], [6, 3, 7, 8, 9]] текущий: 5
i: 1 j: 0 закрепитель: 0 [[1], [5, 2], [6, 3, 7, 8, 9] ] ток: 4
i: 2 j: 2 закрепитель: 2 [[4, 1], [5, 2], [6, 3, 7, 8]] ток: 9
i: 2 j: 1 закрепитель: 1 [[4, 1], [5, 2], [9, 6, 3, 7]]] текущий: 8
i: 2 j: 0 закрепитель: 0 [[4, 1 ], [8, 5, 2], [9, 6, 3]] текущая: 7
ФИНАЛЬНАЯ: [[7, 4, 1], [8, 5, 2], [9, 6, 3] ]]