1.6给定一个由N*N矩阵表示的图像,其中每个像素的大小为4字节,编写一份方法,将图像旋转90度。不占用额外内存空间能否做到?

public void rotate(int[][] matrix, int n)
{
    for (int layer = 0; layer < n / 2; ++layer)
    {
        //layer就是层,从外面一层一层往里。
        int first = layer;
        int last = n - 1 - layer;
        for (int i = first; i < last; ++i)
        {
            int offset = i - first;
            int top = matrix[first][i];
            //左到上
            matrix[first][i] = matrix[last - offset][first];
            //下到左
            matrix[last - offset][first] = matrix[last][last - offset];
            //右到下
            matrix[last][last - offset] = matrix[i][last];
            //上到右
            matrix[i][last] = top;
        }
    }
}

时间复杂度为O(n平方)。这就是最优解了。

posted @ 2017-10-30 19:15  羊头军师  阅读(799)  评论(0编辑  收藏  举报