矩阵旋转问题

顺时针旋转矩阵

http://www.nowcoder.com/questionTerminal/2e95333fbdd4451395066957e24909cc

  1. 方法一:开辟n*n空间的矩阵,将原矩阵中的数据赋值到新建的矩阵中,空间复杂度为O(n^2)。
  2. 方法二:利用原矩阵中数据的范围为0-300的条件,数据仅利用了int类型32位中的低9位,因此可以利用高位来存新值,低9位存旧值,空间复杂度为O(1)。个人觉得面试这么写才行,线性代数矩阵变换那一套面试官不一定觉得你具备计算机思维能力。
    import java.util.*;
    public class Rotate {
     public int[][] rotateMatrix(int[][] mat, int n) {
         // write code here
         // 原地算法,空间复杂度为O(1)
         for(int i = 0; i < n; ++i){
             for(int j = 0; j < n; ++j){
                 mat[j][n - i - 1] += ((mat[i][j] & 0b111111111) << 9);
             }
         }
         for(int i = 0; i < n; ++i){
             for(int j = 0; j < n; ++j){
                 mat[i][j] >>= 9;
             }
         }
         return mat;
     }
    }
全部评论
其实题目说的是,矩阵阶数小于300
1 回复 分享
发布于 2021-03-29 19:23
其实只要不超过2的十六次方就行
点赞 回复 分享
发布于 2022-01-15 12:11

相关推荐

评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务