输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
##输入描述
一个矩阵
##输出描述
矩阵的顺序打印序列
##题目分析
解法 运行时间:33ms 占用内存:629k
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix == null){
return null;
}
ArrayList<Integer> list=new ArrayList<Integer> ();
int row = matrix.length;
int col = matrix[0].length;
int left=0,right=col-1,up=0,down=row-1;
while(left<=right&&up<=down){
//左上到右上
for(int i=left;i<=right;i++){
list.add(matrix[up][i]);
}
//右上到右下
for(int i=up+1;i<=down;i++){
list.add(matrix[i][right]);
}
//右下到左下,判断是否与 左上到右上 重复
if(up!=down){
for(int i=right-1;i>=left;i--){
list.add(matrix[down][i]);
}
}
//左下到左上,判断是否与 右上到右下 重复
if(left!=right){
for(int i=down-1;i>up;i--){
list.add(matrix[i][left]);
}
}
left++;right--;up++;down--;
}
return list;
}
}
这代码看似比较多,其实思路很简单:
①判空
②分别得到矩阵的行数和列数
③确定初始转一圈的上下左右四个点的位置
④根据这四个点依次把数据添加到list中,每转一圈要改变点的位置
⑤返回list