题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
规定偏移量做法
一共四个方向 上下左右 分别可用 左:(0, -1)
右:(0, 1)
上(-1,0)
下(1,0)
表示
题中遍历的方向为顺时针,即为右下左上。
于是规定: dx = {0, 1, 0, -1}
dy = {1, 0, -1, 0}
到达边界就转向,遍历过的点加入res
,并用st
数组标记。
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { int m = matrix.length; int n = matrix[0].length; ArrayList<Integer> res = new ArrayList<>(); boolean[][] st = new boolean[m][n]; int[] dx = {0, 1, 0, -1}; int[] dy = {1, 0, -1, 0}; for(int x = 0,y = 0,d = 0, k = 1; k <= m * n; k++) { res.add(matrix[x][y]); st[x][y] = true; int a = x + dx[d]; int b = y + dy[d]; if(a >= m || b >= n || a < 0 || b < 0 || st[a][b] == true) { d = (d + 1) % 4; a = x + dx[d]; b = y + dy[d]; } x = a; y = b; } return res; } }