输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<Integer>();
//定义上下左右的边界,共需要4个变量
int up = 0;
int down = matrix.length-1;//这里的4个边界全部做到可以达到
int left = 0;
int right = matrix[0].length-1;
while(true){//while中有4个类似的结构,但是不适合合并,因为合并也不会减少代码
if(up>down)break;//函数开头不用另外验matrix,因为while里面的判断 已经做得很完善了
for(int i = left; i<=right; ++i) res.add(matrix[up][i]);
++up;//缩小边界
if(left>right)break;
for(int i = up; i<=down; ++i) res.add(matrix[i][right]);
--right;
if(up>down)break;
for(int i = right; i>=left; --i) res.add(matrix[down][i]);
--down;
if(left>right)break;
for(int i = down; i>=up; --i) res.add(matrix[i][left]);
++left;
}
return res;
}
}
//时间复杂度、空间复杂度都是:二维矩阵matrix的规模 O(N) 
京公网安备 11010502036488号