2021-01-24

对于以下一维数组:

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

先从第一个元素开始遍历,到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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这样上面的数组就变成了

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

其实对于矩阵的翻转也是这样,我们开一个二维数组,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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

垂直翻转:

接下来我们来聊垂直翻转。也叫镜面翻转,原理也很简单每一行先作一维数组的变换,再从第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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值