概述
文章目录
- 题目
- 题目要求
- 示例:
- 题目分析
- 程序实现
- 测试
- 算法复杂度分析
题目
给定一个 n ∗ n n*n n∗nF的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。
题目要求
必须在原地旋转图像,不能借助额外的空间,这就意味着必须直接修改二维矩阵。
示例:
输入:matrix= {{1,2,3},{4,5,6},{7,8,9}}
输出:{{7,4,1},{8,5,2},{9,6,3}}
题目分析
以上图为例,我们分析图像顺时针旋转90度后,每个数字的变化规律,我们需要先将外圈数据[1,2,3,6,9,8,7,4]进行变换,也就是
1->3, 3->9, 9->7, 7->1,
2->6, 6->8, 8->4, 4->2,
可以看到,这些数据处在一个循环当中,我们可以得到这样的规律:
程序实现
#define ROW 4
#define COL ROW
void Rotate(int(*matrix)[COL], int matrixSize)
{
for (int i = 0; i < matrixSize / 2; i++)
{
for (int j = 0; j < (matrixSize + 1) / 2; j++)
{
int tmp = matrix[i][j];
matrix[i][j] = matrix[matrixSize - j - 1][i];
matrix[matrixSize - j - 1][i] = matrix[matrixSize - i - 1][matrixSize - j - 1];
matrix[matrixSize - i - 1][matrixSize - j - 1] = matrix[j][matrixSize - i - 1];
matrix[j][matrixSize - i - 1] = tmp;
}
}
}
测试
算法复杂度分析
时间复杂度为
O
(
n
2
)
O(n^2)
O(n2) 由于采用了双层for循环
空间复杂度为
O
(
1
)
O(1)
O(1) 没有用到额外空间
最后
以上就是激动大白为你收集整理的C语言每日一练---旋转图像的全部内容,希望文章能够帮你解决C语言每日一练---旋转图像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复