第一篇:矩阵翻转

今天是释然发题解的第一天,以后每一天都会和大家分享学习路上的心得,希望和大家一起进步,一起享受coding的乐趣。

今天我们来聊一聊矩阵的翻转,明天和大家分享矩阵的旋转:


矩阵的翻转又分为:水平翻转和垂直翻转

水平翻转:

指将n/2行之前的元素和n/2行后的元素位置进行互换

例如:把下面这个矩阵翻转

1 2 3
4 5 6
7 8 9

翻转成

7 8 9
4 5 6
1 2 3

那么我们应该如何去翻转呢?

首先我们考虑一维的情况,也就是数组的旋转:

对于以下一维数组:

a[]={1,2,3,4,5};

先从第一个元素开始遍历,到n/2,然后将每个元素与n-i进行互换就可以了
代码如下:

int *fliphorizontal(int a[], int n)
{
	int i, tem=0;
	for (i = 0; i <= n / 2; i++)
	{
		tem=a[i];
		a[i]=a[n-i-1];
		a[n-i-1]=tem;
	}

	return a;
}

这样上面的数组就变成了

a[]={5,43,21};

其实对于矩阵的翻转也是这样,我们开一个二维数组,i代表的是从0到n/2,j代表0到n-1列,类似于一维数组的变换,因为比较简单,所以直接把代码给大家:

//水平翻转
int *fliphorizontal(int matrix[][], int n)
{
	int tem = 0, row_max = matrix.length - 1; 
	//rows 用来保存二维数组的行数最大值
	for (int i = 0; i < matrix.length / 2; i++)
	{
		for (int j = 0; j < matrix[0].length; j++)
		{
			tem = matrix[row_max - i][j];
	 //(row_max - i)为倒数i行对应的行。
			matrix[row_max - i][j] = matrix[i][j];
			matrix[i][j] = tem;
		}
	}
	return matrix;
}

垂直翻转:

接下来我们来聊垂直翻转。也叫镜面翻转,原理也很简单每一行先作一维数组的变换,再从第0行遍历到第n-1行就可以啦,代码如下:

//垂直翻转
int[][] *flipvertical(int[][] matrix)
{	//记录列的最大值
    int tem = 0,row_max = matrix[0].length-1;
    //先进行列变换,再拓展到每行
    for(int i=0;i<matrix.length;i++) 
	{
        for(int j=0;j<matrix[0].length/2;j++) 
		{
        	tem = matrix[i][row_max-j];
            matrix[i][row_max-j] = matrix[i][j];
            matrix[i][j] = tem;
        }
    }
    return matrix;
}

矩阵的翻转是不是很有意思呢?我们也经常需要用到对称和镜像的思想,
释然每天发布一点自己学习的知识,希望2年后我们也能在ACM的赛场上见面,一起去追寻自己的程序猿之路吧!

后期也会和大家一起分享学习心得和学习经验呢,明天我们不见不散哦

下期预告:

矩阵旋转:

矩阵旋转

如果大家有什么建议或者要求请后台留言,释然也想和大家一起进步呀!
联系方式:shirandexiaowo@foxmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shirandexiaowo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值