您的位置:首页 > Web前端

剑指offer 顺时针打印矩阵

2015-08-14 14:06 197 查看
解法一:

1. 循环方式

package test;

public class dayin {

public static int[][] sprint(int n){
int[][] r=new int

;

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;
}
}


解法三:

递归方式,关键是大矩阵复制成小矩阵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: