885. Spiral Matrix III

On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east.

Here, the north-west corner of the grid is at the first row and column, and the south-east corner of the grid is at the last row and column.

Now, we walk in a clockwise spiral shape to visit every position in this grid.

Whenever we would move outside the boundary of the grid, we continue our walk outside the grid (but may return to the grid boundary later.)

Eventually, we reach all R * C spaces of the grid.

Return a list of coordinates representing the positions of the grid in the order they were visited.

Example 1:

Input: R = 1, C = 4, r0 = 0, c0 = 0

Output: [[0,0],[0,1],[0,2],[0,3]]

Example 2:

Input: R = 5, C = 6, r0 = 1, c0 = 4

Output: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

Note:

  1. 1 <= R <= 100
  2. 1 <= C <= 100
  3. 0 <= r0 < R
  4. 0 <= c0 < C
class Solution:
    def spiralMatrixIII(self, R, C, r0, c0):
        """
        :type R: int
        :type C: int
        :type r0: int
        :type c0: int
        :rtype: List[List[int]]
        """
        count = 1
        l = 1
        res = []
        direction = 1
        res.append([r0,c0])
        while count<R*C:
            if direction==1:
                c0 += l
                # print(‘direction:1,pos:‘,r0,c0)
                for i in range(c0-l+1,c0+1): #不考虑起点,考虑终点
                    if 0<=r0<R and 0<=i<C:
                        res.append([r0,i])
                        count += 1
                #         print(count)
                # print(res)
                direction = 2
                continue
            if direction==2:
                r0 += l
                # print(‘direction:2,pos:‘,r0,c0)
                for i in range(r0-l+1,r0+1):
                    if 0<=i<R and 0<=c0<C:
                        res.append([i,c0])
                        count += 1
                #         print(count)
                # print(res)
                direction = 3
                l += 1
                continue
            if direction==3:
                c0 -= l
                # print(‘direction:3,pos:‘,r0,c0)
                for i in range(c0+l-1,c0-1,-1):
                    if 0<=r0<R and 0<=i<C:
                        res.append([r0,i])
                        count += 1
                #         print(count)
                # print(res)
                direction = 4
                continue
            if direction == 4:
                r0 -= l
                # print(‘direction:4,pos:‘,r0,c0)
                for i in range(r0+l-1,r0-1,-1):
                    if 0<=i<R and 0<=c0<C:
                        res.append([i,c0])
                        count += 1
                #         print(count)
                # print(res)
                direction = 1
                l += 1
                continue
        return res

每次转换方向,每走两次长度加1,循环跳出条件为数量达到所有格子数。对于每一次走,判断若在棋盘范围内就保存下来。

原文地址:https://www.cnblogs.com/bernieloveslife/p/9799042.html

时间: 2024-10-08 19:23:44

885. Spiral Matrix III的相关文章

[LeetCode] 885. Spiral Matrix III 螺旋矩阵之三

On a 2 dimensional grid with?R?rows and?C?columns, we start at?(r0, c0)?facing east. Here, the north-west corner of the grid is at the?first row and column, and the south-east corner of the grid is at the last row and column. Now, we walk in a clockw

LeetCode 885. Spiral Matrix III

原题链接在这里:https://leetcode.com/problems/spiral-matrix-iii/ 题目: On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north-west corner of the grid is at the first row and column, and the south-east corner of the

[数学] leetcode 885 Spiral Matrix III

problem:https://leetcode.com/problems/spiral-matrix-iii/ 这道题挺简单的,只需要模拟一下题意就可以了.不断地增加步数和改变方向,直到已经读取到矩阵的所有数据. class Solution { public: vector<int> dx{ 0,1,0,-1 }; vector<int> dy{ 1,0,-1,0 }; vector<vector<int>> spiralMatrixIII(int R,

[Solution] 885. Spiral Matrix Ⅲ

Difficulty: Medium Problem On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north-west corner of the grid is at the first row and column, and the south-east corner of the grid is at the last row and colum

Spiral Matrix(LintCode)

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 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]. 难得的一次AC! 虽然感觉题

LeetCode:Spiral Matrix II - 将元素1-n^2以螺旋序填充到矩阵

1.题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2.题目地址 https://leetcode.com/problems/spiral-matrix-ii/ 3.题目内容 英文:Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. 中文:给出一个整数n,生成一个矩阵,使用数字1到n^2以螺旋顺序填充这个矩阵 例如:给出n=3,则生成如下矩阵:

LeetCode:Spiral Matrix - 螺旋输出矩阵中的元素

1.题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2.题目地址 https://leetcode.com/problems/spiral-matrix/ 3.题目内容 英文:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 中文:给出一个m行n列的矩阵,以螺旋顺序返回矩阵中的所有元素. 例如:现有矩阵如下: [  [ 1,

[LeetCode][Java] Spiral Matrix II

题目: Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 题意: 给定一个整数 n,生成一个正方形矩阵.矩阵中包含着从1到n2 这些元素,并且

[LeetCode]59.Spiral Matrix II

[题目] Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] [分析] 模拟 [代码] /**-------------------------