AI summary
type
status
date
slug
summary
category
tags
icon
password
有些读者说,看了本站的很多文章,掌握了框架思维,可以解决大部分有套路框架可循的题目。
但是框架思维也不是万能的,有一些特定技巧呢,属于会者不难,难者不会的类型,只能通过多刷题进行总结和积累。
那么本文我分享一些巧妙的二维数组的花式操作,你只要有个印象,以后遇到类似题目就不会懵圈了。
顺/逆时针旋转矩阵
对二维数组进行旋转是常见的笔试题
在考虑矩阵旋转之前,我们先看一道反转单词顺序的题目热热身。
151. 反转字符串中的单词
给你一个字符串s
,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。进阶:如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用O(1)
额外空间复杂度的 原地 解法。
要原地反转,可以先反转整个链表,再反转每个单词。比如
"hello world labuladong"
到 "gnodalubal dlrow olleh"
再到 "labuladong world hello"
。但是在 Python 中,字符串是不可变的,因此无法直接对字符串进行原地修改。所以这里直接逃课。
61. 旋转链表
给你一个链表的头节点head
,旋转链表,将链表每个节点向右移动k
个位置。
可以向上一题一样先整个反转,然后再分别反转前后两部分。
但是这里有更巧妙的方法,先将链表连接成环,然后在指定位置断开即可。
48. 旋转图像
给定一个 n × n 的二维矩阵matrix
表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
可以先将
n x n
矩阵 matrix
按照左上到右下的对角线进行镜像对称:
然后再对矩阵的每一行进行反转:

结果就是顺时针旋转 90° 的结果。
那么如何将矩阵逆时针旋转 90 度呢?
思路是类似的,只要通过另一条对角线镜像对称矩阵,然后再反转每一行,就得到了逆时针旋转矩阵的结果。
矩阵的螺旋遍历
54. 螺旋矩阵
给你一个m
行n
列的矩阵matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解题的核心思路是按照右、下、左、上的顺序遍历数组,并使用四个变量圈定未遍历元素的边界。
59. 螺旋矩阵 II
给你一个正整数n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。
反过来,让你按照螺旋的顺序生成矩阵,改改上面代码即可。