SpiralMatrix { public int[][] generateMatrix(int n) { int[][] matrix = new int[n][n]; if (n > 0) { int l = (n + 1) / 2; int v = 0; for (int i = 0; i < l; i++) { int r = i, c = i; int di = 0; do { matrix[r][c] = ++v; switch (di) { case 0: if (c == n - i - 1) { di = 1; r++; } else { c++; } break; case 1: if (r == n - i - 1) { di = 2; c--; } else { r++; } break; case 2: if (c == i) { di = 3; r--; } else { c--; } break; case 3: if (r == i) { di = 0; } else { r--; } break; } if (r == i - 1 || r == n - i || c == i - 1 || c == n - i) { break; } } while (r != i || c != i); } } return matrix; }  List<Integer> spiralOrder(int[][] matrix); int[][] generateMatrix(int n);  }
@Test(dataProvider = "nToMatrix") public void test2(int n, int[][] matrix) { assertEquals(new SpiralMatrix().generateMatrix(n), matrix); }