解法一
模拟遍历的过程。看了评论才知道步长有这样一个规律:沿着一个方向走1,1,2,2,3,3……步。
class Solution {public int[][] spiralMatrixIII(int R, int C, int r0, int c0) {// 运动方向int[] DX = {0, 1, 0, -1};int[] DY = {1, 0, -1, 0};int[][] ans = new int[R * C][2];for (int size = 0, dir = 0, step = 1; size < R * C; dir = (dir + 1) % 4) {for (int i = 0; i < step; ++i) {if ((r0 >= 0) && (r0 < R) && (c0 >= 0 ) && (c0 < C)) {ans[size] = new int[]{r0, c0};++size;}r0 += DX[dir];c0 += DY[dir];}// 同一步长走两次就增加1if (dir % 2 == 1) {++step;}}return ans;}}
