Blogger Information
Blog 82
fans 0
comment 1
visits 107838
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
48. Rotate Image
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
Original
1056 people have browsed it

前言

嗯,今天国庆节哦。

最近碰上了两道难度为困难的题,做的自己有点怀疑人生,整天无精打采的。首先是谷歌那道面试题,Super Egg Drop  ,这题我就压根没看懂啥意思,最后大体上明白了应该就是给你几个鸡蛋,你要用手里的鸡蛋确定这个特殊的F层楼在第几层,你要一层层的扔鸡蛋,最后就是无论这个F是第几层,你要用你手里的鸡蛋都能确定的最小的移动步数(不过我还是怀疑我没有看懂,所以就没在做了)。其次是一个 Split Array With Same Average ,这题不光需要你的编程知识,还需要简单的数学推论,最后我能学到的就是

如果数组能划分为两个均值相等的数组,那么子数组的平均数和该数组的是相等的。

好了,来看看今天的题目吧:

描述

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Note:

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.

原地顺时针旋转一个矩阵

ac代码

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {debugger;
    let L = matrix.length,
        circle = L*4 - 4,
        row = L,
        col = L;
    
        

    let startIndex = 0;//是开始的坐标,也是当前开始的行数
    while( circle > 1 ){
        let nextValue,
            curCol = curRow = startIndex;
        for(let i = 0 ;i < row -1;i++ ){
            for( let iterator = 0; iterator < circle ;iterator++){

                // 下
                if( curCol == (col+startIndex-1) && curRow !==( row+startIndex-1 ) ){

                    let temp = nextValue;
                    nextValue=matrix[curRow+1][curCol];
                    matrix[curRow+1][curCol] = temp;
                    curRow++;
                    continue;   
                }

                // 左
                if( curRow ==( row+startIndex-1 ) && ( curCol !== startIndex ) ){
                    let temp = nextValue;
                    nextValue=matrix[curRow][curCol-1];
                    matrix[curRow][curCol-1] = temp;
                    curCol--;
                    continue; 
                }

                // 上
                if( ( curCol == startIndex ) && ( curRow !== startIndex ) ){
                    let temp = nextValue;
                    nextValue=matrix[curRow-1][curCol];
                    matrix[curRow-1][curCol] = temp;
                    curRow--;
                    if( curRow == startIndex ){
                        nextValue = undefined;
                        break;
                    }
                    continue;
                }

                // 右
                if( typeof (nextValue) !== 'undefined' ){
                    let temp = nextValue;
                    nextValue=matrix[curRow][curCol+1];
                    matrix[curRow][curCol+1] = temp;
                    curCol++;
                }else{
                    nextValue = matrix[curRow][curCol+1];
                    matrix[curRow][curCol+1] =  matrix[curRow][curCol];
                    curCol++;
                }

            }        
        }
        row -=2;
        col -= 2;
        circle = 4 * ( row-1 );
        startIndex++;
    }
};

思路

我的思路是把这个矩阵看成一圈一圈的方圈,实际上旋转90度就是把每个圈转 (圈长度 -1)次,

从外向里依次旋转

像贪吃蛇游戏一样,真的

既然是游戏

旋转的时候就是各种边界值的判定啦

有个小技巧是要把接下来旋转的值保存一下

就酱

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post