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