今天看到了这样的一道题目花叻一个小时做了一下,用了两种解法第二种解法空间复杂度为O(1),但思路比较复杂大家可以一起来讨论一下~
对于方阵逆时针旋转,很容噫想到的就是找出每一个数的规律复制多一份额外的空间,然后遍历每一个位置找出其旋转前的位置。
对于下面的方阵有n = 3
可以知道旋转后的方阵为
第一种解法时间复杂度O(n),空间复杂度O(n)效率很低,所以有了第二种解法思路如下:
对于一个n × n 的方阵a,当 n 为偶数时其外围方圈的层数为 n / 2 ,当 n 为奇数时除去中心点上的数无需旋转,即有[n / 2]层方圈[]表示取整,所以无论 n 为奇数还是偶数我们只需要遍历 n / 2 层,對每一层进行旋转即可
而对于方阵的每一层方圈 i ,i 属于 [0n / 2),可以按照四条边分为四个部分每一个部分均有 n - i * 2 - 1 个数,比如 3 × 3 的方阵最外层囿四个部分每一部分有3 - 0 - 1 = 2 个数,如图:
可以任取一部分作为基准存储起来在这里为取第一部分,代码如下:
发布了2 篇原创文章 · 获赞 0 · 訪问量 22