下图的矩阵顺时针打印结果为: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> ret=new ArrayList<>();
int top=0,bottom=matrix.length-1,left=0,right=matrix[0].length-1;
while(top<=bottom&&left<=right)
{
//从左到右
for(int i=left;i<=right;i++){
ret.add(matrix[top][i]);
}
//从上到下
for(int i=top+1;i<=bottom;i++)
{
ret.add(matrix[i][right]);
}
//加一个判断,避免单行单列打印,从右到左
if(top!=bottom)
{
for(int i=right-1;i>=left;i--)
{
ret.add(matrix[bottom][i]);
}
}
//从下到上
if(left!=right)
{
for(int i=bottom-1;i>top;i--)
{
ret.add(matrix[i][left]);
}
}
left++;
right--;
top++;
bottom--;
}
return ret;
}
}
注意,最后一个for里面i>top,不能等于,是下一行打印,不然又会重复打印。
行bottom=matrix.length-1;
列right=matrix[0].length-1;
打印最里面一圈,可能只要打印一行,所以,要求终止行号大于起始行号,终止列号大于起始列号