CodeSignal Interview – rotateImage

https://app.codesignal.com/interview-practice/question/5A8jwLGcEpTPyyjTB/description

Problem

Note: Try to solve this task in-place (with O(1) additional memory), since this is what you’ll be asked to do during an interview.

You are given an n x n 2D matrix that represents an image. Rotate the image by 90 degrees (clockwise).

Example

For

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

the output should be

solution(a) =
    [[7, 4, 1],
     [8, 5, 2],
     [9, 6, 3]]

Solution

Idea

I went the wrong way solving this problem. I tried to find a formula to calculate the new position of an element in the input array. However, after observing a little more, it turned out to be much more simple than that. When we rotate the array 90 degree clockwise:

  • The n-th row become the 1st column
  • The (n-1)th row become the 2nd column
  • ….
  • The first row become the n-th column

It’s a piece of cake now.

Code

function solution(a) {
    let newArr = [];
    
    // start from the last row to the first row
    for (let i = a.length - 1; i >= 0; i--) {
        const row = a[i];
        
        for (let j = 0; j < row.length; j++) {
            if (i === a.length - 1) {
                newArr.push([]);
            }
            newArr[j].push(row[j]);
        }
    }
    
    return newArr;
}
Leave a Reply 0

Your email address will not be published. Required fields are marked *