题目
输入N*N矩阵,输出逆时针排序后的矩阵。
题解
在一维临时数组排序,然后控制矩阵左上角和右下角,一圈圈写入新的矩阵。
代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int[][] m=new int[N][N];
for(int i=0;i<N;++i) {
for(int j=0;j<N;++j) {
m[i][j]=in.nextInt();
}
}
int[][] sortM=new int[N][N];
sortM=dealMatrix(m);
for(int i=0;i<N;++i) {
for(int j=0;j<N;++j) {
System.out.print(sortM[i][j]);
}
System.out.println("
");
}
}
public static int[][] dealMatrix(int[][] m){
if(m==null||m.length!=m[0].length) {
return null;
}
int N=m.length;
int[] sortArr=new int[N*N];
int pos=0;
for(int i=0;i<N;++i) {
for(int j=0;j<N;++j) {
sortArr[pos++]=m[i][j];
}
}
Arrays.sort(sortArr);
int lRow=0;
int lCol=0;
int rRow=N-1;
int rCol=N-1;
int[][] sortM=new int[N][N];
int arrPos=0;
while(lRow<=rRow&&lCol<=rCol) {//
arrPos=writeSortM(sortM,lRow++,lCol++,rRow--,rCol--,sortArr,arrPos);
}
return sortM;
}
private static int writeSortM(int[][] sortM,int lRow,int lCol,int rRow,int rCol,int[] sortArr,int arrPos) {
if(lRow==rRow&&lCol==rCol) {
sortM[lRow][lCol]=sortArr[arrPos++];
return arrPos;
}
int i=lRow;//
int j=lCol;//
while(i<rRow) {//
sortM[i++][j]=sortArr[arrPos++];
}
while(j<rCol) {
sortM[i][j++]=sortArr[arrPos++];
}
while(i>lRow) {
sortM[i--][j]=sortArr[arrPos++];
}
while(j>lCol){
sortM[i][j--]=sortArr[arrPos++];
}
return arrPos;
}
}