【题目练习】旋转图像

题目:

解答:

运行结果 :

解答思路:

一、读题

原地!不能创建新二维数组,只能交换元素。

二、找旋转坐标公式

对于 n 阶方阵:原位置 (i, j),顺时针旋转 90° 之后,新位置是 (j, n-1-i)

比如 n=3:原 (0,0)=1 → 转到 (0,2) 原 (0,2)=3 → 转到 (2,2) 原 (2,2)=9 → 转到 (2,0)

原 (2,0)=7 → 转到 (0,0)

这四个点是一组循环交换!直接赋值会覆盖值,所以不能直接写 matrixnew_inew_j = matrixij,值会丢。

三、想原地旋转经典做法(两种常用)

方案 A:先转置,再每一行反转(这个代码最简单,推荐)

方案 B:分层,一圈一圈,每组 4 个点循环交换

我们先分析方案 A,好理解:

转置:行变列,matrixij <-> matrixji

再把每一行左右翻转

第一步:转置(行和列互换) 第二步:每一行反转

四、确定循环范围

1、转置的时候:只遍历上三角(i < j),不然交换两次等于没换

i 从 0 到 n-1

j 从 i+1 到 n-1

swap (matrix ij, matrix ji)

2、每行反转:对每一行列表,直接 reverse ()

5、写代码进去

matrixSize 就是 n(方阵行数 = 列数)

matrixColSize i 第 i 行的列数,这里全等于 n

相关推荐
天疆说3 小时前
【无标题】
算法
GG.WinGel4 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
开开心心就好4 小时前
电脑小说阅读器,支持朗读和自定义皮肤
服务器·开发语言·javascript·算法·pdf·c#·音视频
闻缺陷则喜何志丹4 小时前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
erzong2314 小时前
Linux操作系统:线程池&踩坑修复
linux·运维·算法
alphaTao5 小时前
LeetCode 每日一题 2026/10/19-2026/10/25
算法·leetcode
ZhengEnCi6 小时前
一亿条数据取前100条完全指南:从全量排序到分块流式最小堆的4种解法实测
python·算法·排序算法
zaizai10076 小时前
STL深度剖析2
java·c++·算法
数智奔流6 小时前
MiniMax的低价攻势,撞上“背题”疑云
前端·javascript·算法