【leetcode】Spiral Matrix

题目:

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:

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
You should return  [1,2,3,6,9,8,7,4,5] .

在《剑指OFFER》中有该题目的类似题,题目的意思是按照螺旋形状的输出一个二维数组的值,如下图所示:


值得思考的有两点:

1. 每次遍历一圈数组的时候,第一个元素的位置都是(0,0),(1,1),(2,2)这样(x,y)满足x==y的点,所以可以根据start的位置判断要不要继续遍历新一圈。

2.遍历一圈的过程可以分为四个部分,从左往右->从上往下->从右往左->从下往上,所以要针对四个方向都能进行判断,如下图:


从左往右:可以直接从左往右遍历

从上往下:当前矩阵至少有两行

从右往左:当前矩阵至少有两行、两列

从下往上:当前矩阵至少有三行、两列

java代码:

	public List<Integer> spiralOrder(int[][] matrix) {
		if (matrix == null) {
			return null;
		}
		List<Integer> list = new ArrayList<Integer>();
		if (matrix.length == 0) {
			return list;
		}
		int m = matrix.length;
		int n = matrix[0].length;

		for (int i = 0; i < (m + 1) / 2 && i < (n + 1) / 2; i++) {
			int start = i;
			for (int j = start; j < n - start; j++) {
				list.add(matrix[start][j]);
			}
			if ((m - 2 * start) / 2 >= 1) {
				for (int j = start + 1; j < m - start; j++) {
					list.add(matrix[j][n - start - 1]);
				}
			}
			if (((m - 2 * start) / 2 >= 1) && (n - start) >= 2) {
				for (int j = n - start - 2; j >= start; j--) {
					list.add(matrix[m - start - 1][j]);
				}
			}
			if ((m - 2 * start) >= 3 && (n - start) >= 2) {
				for (int j = m - start - 2; j > start; j--) {
					list.add(matrix[j][start]);
				}
			}

		}

		return list;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值