Leetcode Rotate Image in Javascript


質問する


You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

に近づく


テーマと画像だけを見て、新しいレイアウトを生成することができて、元のレイアウトをブラウズして、新しいレイアウトを埋めて、簡単に問題を解くことができます.
1列の値が逆で、1行の値であれば簡単に問題を解決できますが、問題の制限条件は次のとおりです.
DO NOT allocate another 2D matrix and do the rotation.
これを確認したら、新しい配列のためにメモリをallocateに設定しないでください.そのため、元の配列を修正しなければなりません.
上の写真をよく見てみましょう.
次に、最初に元のアレイが対称になるように、アレイ内の要素を変更します.では、アレイです.
[1,4,7] , [2,5,8], [3,6,9]
こうなります.次に、各配列の要素を反転します.
[7,4,1], [8,5,2], [9,6,3]
正解が並んだ答えのコードは以下の通りです.
var rotate = function(matrix) {
    const size = matrix.length;
    let start = 0;   
    
    // transpose
    for(let i=0; i<size; i++){
        for(let j=start; j<size; j++){
            if(i !== j){
                let temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        start++;
    }
    
    // reverse
    for(let i=0; i<size; i++){
        for(let j=0; j<size/2; j++){
            let temp = matrix[i][j];
            matrix[i][j] = matrix[i][size-j-1];
            matrix[i][size-j-1] = temp;
        }
    }
    
    return matrix;
};