这道题是要翻转一个二维数组,但是要求不能用新的二维数组,要在原有基础上进行改造。
思路如下图(请原谅我用画图直接画出来的)
一层一层进行替换,先是最外层,由四个方向分别替换,需要注意的是替换前需要做好值得备份。
然后表层替换完成再向里层继续替换,如此往复。
这里n为奇数或偶数,层数的计算都会不同,层数的算法放在这里 floor = length/2+(length%2==0?0:1)
这道题逻辑不难,主要是替换位置的计算很复杂,需要计算要替换的位置,其中需要不停的试错。
代码如下
public class rotate {
public static void rotate(int[][] matrix) {
int length = matrix[0].length;
int pre=0;
int temp=0;
for(int f=0;f<length/2+(length%2==0?0:1);f++){
for(int i=f;i<length-1-f;i++){
pre = matrix[f][i];
matrix[f][i] = matrix[length-1-i][f];
temp = matrix[i][length-1-f];
matrix[i][length-1-f] = pre;
pre=temp;
temp = matrix[length-1-f][length-1-i];
matrix[length-1-f][length-1-i]=pre;
pre=temp;
matrix[length-1-i][f]=pre;
}
}
}
public static void main(String[] args) {
// int[][] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int[][] a = {{1,2},{3,4}};
rotate(a);
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+",");
}
System.out.println();
}
}
}