输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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]
示例1
输入:
[[1,2],[3,4]]
返回值:
[1,2,4,3]
思路:设定边界条件,依次遍历整个矩阵即可。设置上下左右四个边界,初始边界值为两个0和长宽最大值。然后按顺序每次遍历一整行或一整列,遍历结束以后更新对应的边界值,每次循环进行四次遍历。循环终止条件则设置为出现边界值的大小相反时,因为当边界值相等时,仍有未被遍历的数存在。
代码:
public ArrayList<Integer> printMatrix(int [][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
int x1,x2,y1,y2;
x1 = 0;
x2 = n - 1;
y1 = 0;
y2 = m - 1;
ArrayList<Integer> ans = new ArrayList<>();
while(true)
{
for(int i = x1;i <= x2;i++)
{
ans.add(matrix[y1][i]);
}
y1++;
if(y1 > y2) break;
for(int i = y1;i <= y2;i++)
{
ans.add(matrix[i][x2]);
}
x2--;
if(x1 > x2) break;
for(int i = x2;i >= x1;i--)
{
ans.add(matrix[y2][i]);
}
y2--;
if(y1 > y2) break;
for(int i = y2;i >= y1;i--)
{
ans.add(matrix[i][x1]);
}
x1++;
if(x1 > x2) break;
}
return ans;
}