- 问题描述
对矩阵求转置,要求空间复杂度为O(1)。
- 解决方案
public static void matrixTranspose(int[] arr,m,n){
if(arr == null || arr.length <= 1)
return;
for(int i = 0 ;i < arr.length;i ++){
int nextSuccsor = getNextSuccsor(i,m,n);
while(nextSuccsor > i){
nextSuccsor = getNextSuccsor(nextSuccsor,m,n);
}
if(nextSuccsor == i){
exchange(arr,i,m,n);
}
}
}
public static int getNextSuccsor(int i,int m,int n){
int row = i / n;
int col = i % n;
return col * m + row;
}
public static void exchange(int[] arr,int i,int m,int n){
int cur = i;
int nextSuccsor = getNextSuccsor(cur,m,n);
int v = arr[nextSuccsor];
while(nextSuccsor != i){
v = arr[nextSuccsor];
arr[nextSuccsor] = arr[cur];
cur = nextSuccsor;
nextSuccsor = getNextSuccsor(cur,m,n);
}
arr[i] = v;
}