Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return
[1,2,3,6,9,8,7,4,5]
.public static ArrayListspiralOrder(int[][] matrix) { // Start typing your Java solution below // DO NOT write main() function ArrayList res = new ArrayList (); if (matrix.length == 0) { return res; } int colStart = 0; int colEnd = matrix[0].length - 1; int rowStart = 0; int rowEnd = matrix.length - 1; while (colStart <= colEnd && rowStart <= rowEnd) { for (int i=colStart; i<=colEnd; i++) { res.add(matrix[rowStart][i]); } rowStart++; for (int i=rowStart; i<=rowEnd; i++) { res.add(matrix[i][colEnd]); } colEnd--; if (rowStart > rowEnd) break; for (int i=colEnd; i>=colStart; i--) { res.add(matrix[rowEnd][i]); } rowEnd--; if (colStart > colEnd) break; for (int i=rowEnd; i>=rowStart; i--) { res.add(matrix[i][colStart]); } colStart++; } return res; }
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =
You should return the following matrix:Given n =
3
,[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
public class Solution { public int[][] generateMatrix(int n) { // Start typing your Java solution below // DO NOT write main() function int[][] matrix = new int[n][n]; int colStart = 0; int colEnd = n - 1; int rowStart = 0; int rowEnd = n - 1; int val = 1; while (colStart <= colEnd && rowStart <= rowEnd) { for (int i = colStart; i <= colEnd; i++) { matrix[rowStart][i] = val; val++; } rowStart++; for (int i = rowStart; i <= rowEnd; i++) { matrix[i][colEnd] = val; val++; } colEnd--; for (int i = colEnd; i >= colStart; i--) { matrix[rowEnd][i] = val; val++; } rowEnd--; for (int i = rowEnd; i >= rowStart; i--) { matrix[i][colStart] = val; val++; } colStart++; } return matrix; } }
No comments:
Post a Comment