矩阵旋转问题
顺时针旋转矩阵
http://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc
- 方法一:开辟n*n空间的矩阵,将原矩阵中的数据赋值到新建的矩阵中,空间复杂度为O(n^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;
}
}