今天同事问了我一个数组旋转的问题,是把一个数组顺时针转3次,要求输出每次转的结果,用一个算法实现,就像下面这样:
原数组如下:
1 2 3
4 5 6
7 8 9
转3次结果分别如下:
7 4 1
8 5 2
9 6 3
4 5 6
7 8 9
转3次结果分别如下:
7 4 1
8 5 2
9 6 3
9 8 7
6 5 4
3 2 1
3 6 9
2 5 8
1 4 7
我给他的程序如下:
6 5 4
3 2 1
3 6 9
2 5 8
1 4 7
我给他的程序如下:
public class ArrayRound
{
public static void roundArray(int[][] arr)
{
int[] tmp = new int[arr.length * arr.length];
int pos = 0;
int i, j;
for (i = 0; i < arr.length; i++)
{
for (j = arr.length - 1; j >= 0; j--)
{
tmp[pos++] = arr[j][i];
}
}
for (i = 0; i < tmp.length; i++)
{
arr[i / arr.length][i % arr.length] = tmp[i];
}
}
public static void main(String[] args)
{
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
for (int i = 0; i < 3; i++)
{
roundArray(arr);
System.out.println("++++++++++++++++++++++++");
for (int j = 0; j < arr.length; j++)
{
for (int k = 0; k < arr.length; k++)
{
System.out.print(arr[j][k] + " ");
}
System.out.println();
}
}
}
}
{
public static void roundArray(int[][] arr)
{
int[] tmp = new int[arr.length * arr.length];
int pos = 0;
int i, j;
for (i = 0; i < arr.length; i++)
{
for (j = arr.length - 1; j >= 0; j--)
{
tmp[pos++] = arr[j][i];
}
}
for (i = 0; i < tmp.length; i++)
{
arr[i / arr.length][i % arr.length] = tmp[i];
}
}
public static void main(String[] args)
{
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
for (int i = 0; i < 3; i++)
{
roundArray(arr);
System.out.println("++++++++++++++++++++++++");
for (int j = 0; j < arr.length; j++)
{
for (int k = 0; k < arr.length; k++)
{
System.out.print(arr[j][k] + " ");
}
System.out.println();
}
}
}
}