现有一个NxN的矩阵,阶数为N,请编写一个算法将矩阵顺时针旋转90度并将其作为返回值。要求不使用缓存矩阵,保证N不大于500,元素不大于256,每个元素用int表示。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
语言是python2.7,思路是zip迭代 + map映射,参考了http://baijiahao.baidu.com/s?id=1579306472315552043&wfr=spider&for=pc 代码如下
# -*- coding:utf-8 -*- class Transform: def transformImage(self, mat, n): mat.reverse() return map(list,zip(*mat))
# -*- coding:utf-8 -*-
class Transform:
def transformImage(self, mat, n):
if n <= 1:
return mat
for i in xrange(n/2):
self.transformRound(mat, i, n - 1 - i, n)
return mat
def transformRound(self, mat, start, end, n):
if start == end:
return
for i in range(start, end):
tmp = mat[start][i]
mapd = n - 1 - i
mat[start][i] = mat[mapd][start]
mat[mapd][start] = mat[end][mapd]
mat[end][mapd] = mat[i][end]
mat[i][end] = tmp
public class Transform { public static int[][] transformImage(int[][] mat, int n) { if (mat == null) { return null; } int temp = 0; for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ temp = mat[i][j]; mat[i][j] = mat[n-j-1][n-i-1]; mat[n-j-1][n-i-1] = temp; } } for(int i=0;i<(n/2);++i){ for(int j=0;j<n;++j){ temp = mat[i][j]; mat[i][j] = mat[n-i-1][j]; mat[n-i-1][j] = temp; } } return mat; } }