Rotate Image

2019-10-22  本文已影响0人  Ukuleler
捕获.PNG

这道题是要翻转一个二维数组,但是要求不能用新的二维数组,要在原有基础上进行改造。
思路如下图(请原谅我用画图直接画出来的)


无标题.png

一层一层进行替换,先是最外层,由四个方向分别替换,需要注意的是替换前需要做好值得备份。
然后表层替换完成再向里层继续替换,如此往复。
这里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();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读