美文网首页
Rotate Image

Rotate Image

作者: Ukuleler | 来源:发表于2019-10-22 16:39 被阅读0次
    捕获.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();
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Rotate Image

          本文链接:https://www.haomeiwen.com/subject/fcoqvctx.html