顺时针打印矩阵【Java版】
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
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)
《剑指Offer-Java题解》 文章被收录于专栏
《剑指Offer-Java题解》