为了账号安全,请及时绑定邮箱和手机立即绑定

如何旋转二维数组?

如何旋转二维数组?

如何旋转二维数组?受陈雷蒙德的职位,假设您有一个4x4二维数组,编写一个将其旋转90度的函数。Raymond链接到伪代码中的解决方案,但我想看到一些真实的东西。[1][2][3][4] [5][6][7][8] [9][0][1][2] [3][4][5][6]变成:[3][9][5][1] [4][0][6][2] [5][1][7][3] [6][2][8][4]更新尼克的回答是最直截了当的,但有没有办法比n^2做得更好呢?如果矩阵是10000x10000呢?
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

这里是C#

int[,] array = new int[4,4] {
    { 1,2,3,4 },
    { 5,6,7,8 },
    { 9,0,1,2 },
    { 3,4,5,6 }};int[,] rotated = RotateMatrix(array, 4);static int[,] RotateMatrix(int[,] matrix, int n) {
    int[,] ret = new int[n, n];

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            ret[i, j] = matrix[n - j - 1, i];
        }
    }

    return ret;}


查看完整回答
反对 回复 2019-06-19
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

O(n^2)时间与O(1)空间算法(没有任何解决办法,也没有时髦的东西!)

旋转+90:

  1. 转座子
  2. 反转每一行

轮换-90:

方法1:

  1. 转座子
  2. 反转每一列

方法2:

  1. 反转每一行
  2. 转座子

旋转+180:

方法1:旋转+90次两次

方法2*反转每一行,然后反转每一列(转置)

旋转180:

方法1*轮调-90次两次

方法2:反转每一列,然后反转每一行

方法3*旋转+180,因为它们是相同的


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 763 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信