首页 > 试题广场 >

像素翻转

[编程题]像素翻转
  • 热度指数:31132 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

现有一个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]]
推荐
思路:第一步:先将矩阵以次对角线互换 (如果是逆时针则为主对角线)
           第二步:交换第i行到第n-i-1行

上代码:

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;
         
     }
}

编辑于 2015-08-18 20:34:59 回复(7)