题目

给你一个正整数 n ,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

解析

找不到图了,记得之前题目示例中是有个图的,咋没了呢,大概意思就是比如n=3,就会生成一个3*3的矩阵,顺序是从外到内顺时针螺旋排的。
这道题属于数组中的模拟法,就是一直来循环处理,但是要处理好边界条件,比如矩阵的每一条边,要用左闭右开的方式去处理,这样的每条边的处理流程是一样的

func generateMatrix(n int) [][]int {top, bottom := 0, n-1left, right := 0, n-1num := 1tar := n * nmatrix := make([][]int, n)//定义里面的一维数组for i := 0; i < n; i++ {matrix[i] = make([]int, n)}//go中没有while,得用for循环来实现for num <= tar {for i := left; i <= right; i++ {matrix[top][i] = numnum++}top++for i := top; i <= bottom; i++ {matrix[i][right] = numnum++}right--for i := right; i >= left; i-- {matrix[bottom][i] = numnum++}bottom--for i := bottom; i >= top; i-- {matrix[i][left] = numnum++}left++}return matrix
}

----------------------------我是分割线-------------------------------------------------------------
接下来顺路来看另一道题,螺旋矩阵I

题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

解析

首先注意这道题,与上一道题不同的是,这道题是一个mn的矩阵,就有可能是个长方形,因此在循环处理的时候,如果完全用上面的写法的话,会越界;
同时另一个要注意的地方是,这道题给的是矩阵m
n,而上一道题给的是正整数n,所以计算行列的时候有所区别

func spiralOrder(matrix [][]int) []int {rows := len(matrix)columns := len(matrix[0])top, bottom := 0, rows -1left, right := 0, columns -1 res := make([]int, rows*columns)index := 0nums := rows*columnsfor nums >= 1 {for i := left; i <= right && nums >= 1; i++ {res[index] = matrix[top][i]index++nums--}top++for i := top; i <= bottom && nums >= 1; i++ {res[index] = matrix[i][right]index++nums--}right--for i := right; i >= left && nums >= 1; i-- {res[index] = matrix[bottom][i]index++nums--}bottom--for i := bottom; i >= top && nums >= 1; i-- {res[index] = matrix[i][left]index++nums--}left++}return res
}

另一种方式是用golang的append来向数组中追加元素,就不需要用index了,代码如下:

func spiralOrder(matrix [][]int) []int {rows := len(matrix)columns := len(matrix[0])top, bottom := 0, rows -1left, right := 0, columns -1 res := make([]int, 0)nums := rows*columnsfor nums >= 1 {for i := left; i <= right && nums >= 1; i++ {res = append(res, matrix[top][i])nums--}top++for i := top; i <= bottom && nums >= 1; i++ {res = append(res, matrix[i][right])nums--}right--for i := right; i >= left && nums >= 1; i-- {res = append(res, matrix[bottom][i])nums--}bottom--for i := bottom; i >= top && nums >= 1; i-- {res = append(res, matrix[i][left])nums--}left++}return res
}

----------------------------------------------我是分割线----------------------------------------------------------
下面还有一道是类型的题

题目

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

解析

这道题解法感觉确实不好想到(菜鸡本鸡),是要将原矩阵水平翻转后再对角线翻转(应该是次对角线),我还是花了一遍图在明白怎么翻过来的,还是直接记住方法吧。。

func rotate(matrix [][]int)  {//图片一般都是n*n的n := len(matrix)//水平翻转for i := 0; i < n/2; i++ {matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i]}//主对角线翻转for i := 0; i < n; i++ {for j := 0; j < i; j++ {matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]}}
}

leetcode59螺旋矩阵II + 54螺旋矩阵 + 48旋转图像相关推荐

  1. 模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)

    54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9] ...

  2. 代码随想录第二天 |LeetCode977.有序数组的平方,LeetCode209.长度最小的子数组,LeetCode59.螺旋矩阵II

    LeetCode977.有序数组的平方 977. 有序数组的平方 - 力扣(LeetCode) 暴力解法: 一开始不习惯用双指针解法,习惯性先平方再用双指针,发现做不出了HH.于是愉快的用传统暴力解法 ...

  3. 代码随想录算法训练营第二天|LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II。

    LeetCode977.有序数组的平方 题目链接:LeetCode977.有序数组的平方 暴力解法: class Solution { public:vector<int> sortedS ...

  4. LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

    文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...

  5. 代码随想录Day02 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II

    977.有序数组的平方 力扣题目链接(opens new window) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 示例 1: ...

  6. LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)

    文章目录 T19: 48. 旋转图像 (中等) 思路 解法 1: 新增数组 解法 2: 原地旋转 T20: 54. 螺旋矩阵(中等) 思路 解法: 到边界换方向 T21: 240. 搜索二维矩阵 II ...

  7. 代码随想录算法训练营Day02 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

    LeetCode977. 有序数组的平方 题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 思路:看到题目的第一想法是使用暴力法 ...

  8. 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...

  9. LeetCode-数组-54. 螺旋矩阵

    54. 螺旋矩阵 解题思路: 这里的方法不需要记录已经走过的路径,所以执行用时和内存消耗都相对较小 首先设定上下左右边界 其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码 ...

最新文章

  1. 动态增删表格行(纯JS写法)
  2. 错误处理:one of the variables needed for gradient computation has been modified by inplace operation
  3. boost::ReadablePropertyMapConcept用法的测试程序
  4. SQL语句来查询今天、昨天、7天内、30天的数据,经典!
  5. 数组操作的两个常见小问题
  6. PHP中错误处理集合
  7. ng-template和ngTemplateOutlet
  8. java关闭一个窗口打开另一个_推开中式门窗,就像打开了另一个写意的世界…...
  9. 校招笔试C语言,校招c ++笔试题汇总
  10. 漫步数学分析番外五(下)
  11. 力荐!计算机视觉开源工具中的瑞士军刀—Dlib最新高级特性教程
  12. js+java实现登录滑动图片验证功能
  13. ubuntu18.04安装CH340和CH341驱动
  14. laravel框架解决sql注入问题
  15. 阿里飞天云平台架构简介
  16. Gateway网关简介以及使用
  17. 糗百新鲜事——爬虫python
  18. Springboot毕设项目高校教材征订系统设计与实现ig8t1(java+VUE+Mybatis+Maven+Mysql)
  19. 独立站斗篷技术是什么
  20. 无多普勒频移的海底混响单元散射模型卷积法

热门文章

  1. HTML+CSS系列学习笔记.md01
  2. 来,我们来聊聊怎么学好3dMax三维建模这款软件
  3. 解决ffmpeg获取AAC音频文件duration不准
  4. 安卓包在真机上安装时的“风险提示”问题
  5. 四川消防设施操作员证有哪些条件和要求?
  6. 小程序存入手机号码到通讯录
  7. php 抓取远程内容,php抓取远程网页内容简单示例
  8. Python音视频开发:消除抖音短视频Logo的图形化工具实现
  9. Flink的两阶段提交
  10. 基于STM32设计的汽车修理厂环境监测系统(华为云IOT)