public List<Integer> (int[][] matrix){ List<Integer> ans = new ArrayList<Integer>(); if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) return ans; int rBegin = 0, cBegin = 0, rEnd = matrix.length - 1, cEnd = matrix[0].length - 1; while (rBegin <= rEnd && cBegin <= cEnd) { for (int i = cBegin; i <= cEnd; ++i) { ans.add(matrix[rBegin][i]); } rBegin += 1; // go down for (int i = rBegin; i <= rEnd; ++i) { ans.add(matrix[i][cEnd]); } cEnd -= 1; // go left if (rBegin > rEnd) break; for (int i = cEnd; i >= cBegin; --i) ans.add(matrix[rEnd][i]); rEnd -= 1; // go up if (cBegin > cEnd || rBegin > rEnd) break; for (int i = rEnd; i >= rBegin; --i) ans.add(matrix[i][cBegin]); cBegin += 1; }
publicint[][] generateMatrix(int n) { int[][] board = newint[n][n]; int rBegin = 0, rEnd = n - 1, cBegin = 0, cEnd = n - 1; int num = 1; while (rBegin <= rEnd && cBegin <= cEnd) { for (int i = cBegin; i <= cEnd; ++i) { board[rBegin][i] = num++; } rBegin += 1; // go down for (int i = rBegin; i <= rEnd; ++i) { board[i][cEnd] = num++; } cEnd -= 1; // go left if (rBegin > rEnd || cBegin > cEnd) break; for (int i = cEnd; i >= cBegin; --i) { board[rEnd][i] = num++; } rEnd -= 1; if (rBegin > rEnd || cBegin > cEnd) break; for (int i = rEnd; i >= rBegin; --i) { board[i][cBegin] = num++; } cBegin += 1; } return board; }
近期评论