package com.interview.books.leetcodeoj; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 14-12-22 * Time: 下午5:59 */ public class LOJ54_SpiralMatrix { //visit by layer: top, right, bottom and left. //int board = Math.min(rows, cols) + 1; //if rows != cols, layer should loop from [0 to board/2 - 1] //when layer == board/2 - 1 and Math.min(rows, cols) % 2 == 1, do loop the last two round on bottom and left. public List<Integer> spiralOrder(int[][] matrix) { List<Integer> numbers = new ArrayList(); if(matrix.length == 0) return numbers; int rows = matrix.length; int cols = matrix[0].length; int board = Math.min(rows, cols) + 1; for(int layer = 0; layer < board/2; layer++){ numbers.add(matrix[layer][layer]); for(int i = layer + 1; i < cols - layer; i++) numbers.add(matrix[layer][i]); for(int i = layer + 1; i < rows - layer; i++) numbers.add(matrix[i][cols-layer-1]); if(layer == board/2 - 1 && Math.min(rows, cols) % 2 == 1) break; for(int i = cols-layer-2; i >= layer; i--) numbers.add(matrix[rows-layer-1][i]); for(int i = rows-layer-2; i > layer; i--) numbers.add(matrix[i][layer]); } return numbers; } }