欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spiral Matrix

程序员文章站 2022-07-12 09:28:27
...

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:

 

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
    	List<Integer> res = new ArrayList<>();
    	if (matrix == null || matrix.length == 0) {
    		return res;
    	}
    	int tR = 0;
    	int tC = 0;
    	int dR = matrix.length-1;
    	int dC = matrix[0].length-1;
    	while (tR <= dR && tC <= dC) {
    		printEdge(matrix, tR++, tC++, dR--, dC--, res);
    	}
    	return res;
    }

	private void printEdge(int[][] matrix, int tR, int tC, int dR, int dC, List<Integer> res) {
		// TODO Auto-generated method stub
		if (tR == dR) {
			for (int i = tC; i <= dC; i++) {
				res.add(matrix[tR][i]);
			}
		} else if (tC == dC) {
			for (int i = tR; i <= dR; i++) {
				res.add(matrix[i][tC]);
			}
		} else {
			int curC = tC;
			int curR = tR;
			while (curC != dC) {
				res.add(matrix[tR][curC]);
				curC++;
			}
			while (curR != dR) {
				res.add(matrix[curR][dC]);
				curR++;
			}
			while (curC != tC) {
				res.add(matrix[dR][curC]);
				curC--;
			}
			while (curR != tR) {
				res.add(matrix[curR][tC]);
				curR--;
			}
		}
	}
}