【LeetCode】Spiral Matrix

133 篇文章 0 订阅
121 篇文章 2 订阅
Spiral Matrix 
Total Accepted: 9568 Total Submissions: 47010 My Submissions
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] .
【解题思路】
本题代码借鉴了别人的思路。
1、设定边界值,startx,endx,starty,endy。
2、左到右,上到下,右到左,下到上,直到while条件结束。

Java AC 340ms

public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
		ArrayList<Integer> allList = new ArrayList<Integer>();
		if (matrix == null || matrix.length == 0) {
			return allList;
		}
		allList = printfMatrix(matrix);
		return allList;
	}

	public ArrayList<Integer> printfMatrix(int[][] matrix) {
		ArrayList<Integer> allList = new ArrayList<Integer>();
		int m = matrix.length;
		int n = matrix[0].length;
		int startx = 0;
		int starty = 0;
		int endx = m - 1;
		int endy = n - 1;
		while (startx <= endx && starty <= endy) {
			for (int i = starty; i <= endy; i++) {
				allList.add(matrix[startx][i]);
			}
			for (int i = startx+1; i <= endx; i++) {
				allList.add(matrix[i][endy]);
			}
			if (startx != endx) {
				for (int i = endy-1; i >= starty; i--) {
					allList.add(matrix[endx][i]);
				}
			}
			if (starty != endy) {
				for (int i = endx-1; i > startx; i--) {
					allList.add(matrix[i][starty]);
				}
			}
			startx++;
			endx--;
			starty++;
			endy--;
		}
		return allList;
	}
}
Python AC 76ms

class Solution:
    # @param matrix, a list of lists of integers
    # @return a list of integers
    def spiralOrder(self, matrix):
        list = []
        if matrix is None or len(matrix) == 0:
            return list
        m = len(matrix)
        n = len(matrix[0])
        startx = 0
        starty = 0
        endx = m - 1
        endy = n - 1
        while startx <= endx and starty <= endy:
            for i in range(starty, endy + 1):
                list.append(matrix[startx][i])
            for i in range(startx + 1, endx + 1):
                list.append(matrix[i][endy])
            if startx != endx:
                for i in range(endy - 1, starty - 1, -1):
                    list.append(matrix[endx][i])
            if starty != endy:
                for i in range(endx - 1, startx, -1):
                    list.append(matrix[i][starty])
            startx += 1
            endx -= 1
            starty += 1
            endy -= 1
        return list
        
        



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值