class error_1 {
public void rotate(int[][] matrix) { rotateAngle(matrix, 0, 0, matrix.length); }
private void rotateEdge(int[][] map, int _i, int _j, int size) { int mid = size / 2; int[] buffer = new int[size]; for (int i = 0; i < size; i++) { buffer[i] = map[_i + i][mid]; map[_i + i][mid] = map[mid][_j + i]; } for (int i = 0; i < size; i++) { map[mid][_j + i] = buffer[size - 1 - i]; } }
private void rotateAngle(int[][] map, int _i, int _j, int size) { if (size == 2) { int buffer = map[_i][_j]; map[_i][_j] = map[_i + 1][_j]; map[_i + 1][_j] = map[_i + 1][_j + 1]; map[_i + 1][_j + 1] = map[_i][_j + 1]; map[_i][_j + 1] = buffer; } else if (size == 3) { rotateEdge(map, _i, _j, size); int buffer = map[_i][_j]; map[_i][_j] = map[_i + 2][_j]; map[_i + 2][_j] = map[_i + 2][_j + 2]; map[_i + 2][_j + 2] = map[_i][_j + 2]; map[_i][_j + 2] = buffer; } else { int halfSize = size / 2; if (size % 2 != 0) { rotateEdge(map, _i, _j, size); rotateAngle(map, _i, _j, halfSize); rotateAngle(map, _i, _j + halfSize + 1, halfSize); rotateAngle(map, _i + halfSize + 1, _j, halfSize); rotateAngle(map, _i + halfSize + 1, _j + halfSize + 1, halfSize); } else { rotateAngle(map, _i, _j, halfSize); rotateAngle(map, _i, _j + halfSize, halfSize); rotateAngle(map, _i + halfSize, _j, halfSize); rotateAngle(map, _i + halfSize, _j + halfSize, halfSize); } } } }
|