【编程题】顺时针打印矩阵(Java实现)
题目来源
剑指offer第19题
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
题目代码
方法一,通过定义圈
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer>list=new ArrayList<>();
if(matrix==null||matrix.length<=0)
return list;
int row=matrix.length,col=matrix[0].length;
int cir=(Math.min(row,col)-1)/2+1;
for(int i=0;i<cir;i++){
for(int j=i;j<col-i;j++)
list.add(matrix[i][j]);
for(int j=i+1;j<row-i;j++)
list.add(matrix[j][col-i-1]);
for(int j=col-i-2;j>=i&&row-i-1!=i;j--)
list.add(matrix[row-i-1][j]);
for(int j=row-i-2;j>i&&col-i-1!=i;j--)
list.add(matrix[j][i]);
}
return list;
}
}
方法二,通过定义首尾指针
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer>list=new ArrayList<>();
if(matrix==null||matrix.length<=0)
return list;
int left=0,top=0,bottom=matrix.length-1,right=matrix[0].length-1;
while(left<=right&&top<=bottom){
for(int i=left;i<=right;i++)
list.add(matrix[top][i]);
for(int i=top+1;i<=bottom;i++)
list.add(matrix[i][right]);
if(top!=bottom)
for(int i=right-1;i>=left;i--)
list.add(matrix[bottom][i]);
if(left!=right)
for(int i=bottom-1;i>top;i--)
list.add(matrix[i][left]);
left++;
right--;
top++;
bottom--;
}
return list;
}
}