题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
解题思路
设置辅助函数
-
判断 left 是否大于 right 或者 top 是否大于 bottom;
-
从 left 到 right;
-
从 top+1 到 bottom;
-
满足 top!=bottom 条件下(防止只有一行),从 right-1 到 left;
-
满足 left!=right 条件下(防止只有一列),从 bottom-1 到 top。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> ret = new ArrayList<>();
if (matrix == null || matrix.length == 0)
return ret;
printMatrix(matrix, 0, matrix[0].length-1, 0, matrix.length-1, ret);
return ret;
}
private void printMatrix(int[][] matrix, int left, int right, int top, int bottom, ArrayList<Integer> ret) {
if (left > right || top > bottom)
return;
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]);
for (int i = right-1; i >= left && top != bottom; i--)
ret.add(matrix[bottom][i]);
for (int i = bottom-1; i > top && left != right; i--)
ret.add(matrix[i][left]);
printMatrix(matrix, left+1, right-1, top+1, bottom-1, ret);
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于