我是靠谱客的博主 怕黑唇膏,最近开发中收集的这篇文章主要介绍C语言每日一练---旋转图像,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 题目
        • 题目要求
        • 示例:
    • 题目分析
    • 程序实现
    • 测试
    • 算法复杂度分析

题目

给定一个 n ∗ n n*n nnF的二维矩阵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,
可以看到,这些数据处在一个循环当中,我们可以得到这样的规律:

arr[row][col] = arr[n-col-1][row]arr[n-col-1][row]=arr[n-row-1][n-col-1]arr[n-row-1][n-col-1]=arr[col][n-row-1]arr[col][n-row-1]=arr[row][col]

程序实现


#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语言每日一练---旋转图像所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部