对于以下一维数组:
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;
}