龙空技术网

leetcode885_go_螺旋矩阵III

每天都AC 80

前言:

今天朋友们对“螺旋矩阵java实现”大体比较着重,大家都想要学习一些“螺旋矩阵java实现”的相关知识。那么小编在网摘上网罗了一些有关“螺旋矩阵java实现””的相关文章,希望咱们能喜欢,兄弟们一起来学习一下吧!

题目

在 R 行 C 列的矩阵上,我们从 (r0, c0) 面朝东面开始

这里,网格的西北角位于第一行第一列,网格的东南角位于最后一行最后一列。

现在,我们以顺时针按螺旋状行走,访问此网格中的每个位置。

每当我们移动到网格的边界之外时,我们会继续在网格之外行走(但稍后可能会返回到网格边界)。

最终,我们到过网格的所有 R * C 个空间。

按照访问顺序返回表示网格位置的坐标列表。

示例 1:输入:R = 1, C = 4, r0 = 0, c0 = 0 输出:[[0,0],[0,1],[0,2],[0,3]]

示例 2:输入:R = 5, C = 6, r0 = 1, c0 = 4 输出:[[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]]

提示:1 <= R <= 100

1 <= C <= 100

0 <= r0 < R

0 <= c0 < C

解题思路分析

1、遍历;时间复杂度O(n^2),空间复杂度O(n^2)

// 顺时针:上右下左// 本题:右、下、左、上var dx = []int{0, 1, 0, -1}var dy = []int{1, 0, -1, 0}func spiralMatrixIII(rows int, cols int, rStart int, cStart int) [][]int {   res := make([][]int, 0)   total := rows * cols   x, y := rStart, cStart   res = append(res, []int{x, y})   index := 1   if total == 1 {      return res   }   for k := 1; k < 2*(rows+cols); k = k + 2 {      for i := 0; i < 4; i++ {         step := k + i/2 // 本次移动的步数,分别是2次的倍数         for j := 0; j < step; j++ {            x = x + dx[i]            y = y + dy[i]            if 0 <= x && x < rows && 0 <= y && y < cols {               res = append(res, []int{x, y})               index++               if index == total {                  return res               }            }         }      }   }   return res}

2、遍历;时间复杂度O(n^2),空间复杂度O(n^2)

// 顺时针:上右下左// 本题:右、下、左、上var dx = []int{0, 1, 0, -1}var dy = []int{1, 0, -1, 0}func spiralMatrixIII(rows int, cols int, rStart int, cStart int) [][]int {   res := make([][]int, 0)   total := rows * cols   x, y := rStart, cStart   index := 0   step := 2   dir := 0   for index < total {      for i := 0; i < step/2; i++ { // 本次移动的步数         if 0 <= x && x < rows && 0 <= y && y < cols {            res = append(res, []int{x, y})            index++            if index == total {               return res            }         }         x = x + dx[dir]         y = y + dy[dir]      }      dir = (dir + 1) % 4      step++   }   return res}
总结

Medium题目,按照题目要求进行模拟,如果在范围内就加入结果

标签: #螺旋矩阵java实现