解法一:
1. 循环方式
package test;
public class dayin {
public static int[][] sprint(int n){
int[][] r=new int[n][n];
int startx=0;
int endx=n-1;
int starty=0;
int endy=n-1;
int k=1;
while(startx<=endx && starty<=endy){
for(int i=startx;i<=endx;i++){
r[starty][i]=k;
k++;
}
starty++;
for(int i=starty;i<=endy;i++){
r[i][endx]=k;
k++;
}
endx--;
for(int i=endx;i>=startx;i--){
r[endy][i]=k;
k++;
}
endy--;
for(int i=endy;i>=starty;i--){
r[i][startx]=k;
k++;
}
startx++;
}
return r;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=4;
int[][] r=sprint(n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(r[i][j]);
System.out.print(" ");
}
System.out.print("\n");
}
}
}
解法二:
分成两步,思路清晰
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result=new ArrayList<Integer>();
if(matrix==null)
return null;
int start=0;
int height=matrix.length;
int width=matrix[0].length;
while(height>2*start && width>2*start){
result.addAll(printMatrixFun(matrix,start));
start++;
}
return result;
}
private ArrayList<Integer> printMatrixFun(int[][] matrix,int start){
ArrayList<Integer> result=new ArrayList<Integer>();
int endx=matrix[0].length-1-start;
int endy=matrix.length-1-start;
for(int i=start;i<=endx;i++){
result.add(matrix[start][i]);
}
if(start<endy){
for(int i=start+1;i<=endy;i++)
result.add(matrix[i][endx]);
}
if(start<endx && start<endy){
for(int i=endx-1;i>=start;i--){
result.add(matrix[endy][i]);
}
}
if(start<endx && start<endy-1){
for(int i=endy-1;i>=start+1;i--)
result.add(matrix[i][start]);
}
return result;
}
}
解法三:
递归方式,关键是大矩阵复制成小矩阵