SpiralMatrix系列问题

这里关于旋转数组问题1&2,解题思路都是一样的。这里以2问题为例说明。


旋转数组2问题

输入:一个整数n
输出:按照逆时针从外向内的二维数组
用例:3===>
[ [1,2,3],
[8,9,4],
[7,6,5] ]

分析

关键是看一下这个数组的形式。直观上来看就是按照逆时针一个个生成的,所以解题思路也应该是按照这个。关键是看用什么方式来控制这个逆时针的顺序。

思路

按照一圈逆时针来做一个循环,这里用x和y来指出当前操作元素的范围。n表示当前数组的大小,每执行完一个循环,n-2,直到n=0或者n=1为止。

代码

package day_17;

public class Spiral_Mat_2 {
    public int[][] generateMatrix(int n) {
            // 按照先处理最外层,再迭代处理的思想来做
        int res[][]= new int[n][n];
        int x=0,y=0,val=1;  // xy记录当前位置
        while(n>0){
            if(n==1){
                res[x][y]=val;
                break;
            }
            for(int i=0;i<n-1;i++){ //首行
                res[x][y++]=val; // 这里的位置自动就加上去了
                                // 注意上面的 循环条件是 i<n-1,然后 y++,用完后y自动++。
                val++;
            }
            for(int i=0;i<n-1;i++){ //末列
                res[x++][y]=val;
                val++;
            }
            for(int i=0;i<n-1;i++){
                res[x][y--]=val;
                val++;
            }
            for(int i=0;i<n-1;i++){
                res[x--][y]=val;
                val++;
            }  // 这个时候 x=0;y=0 所以需要下面再++
            x++;
            y++;
            n=n-2;
        }
        return res;
    }

    public static void main(String args[]){
        Spiral_Mat_2 s = new Spiral_Mat_2();
        int arr[][] = s.generateMatrix(3);
        for(int i=0;i<arr.length;i++){
            for (int j=0;j<arr[0].length;j++){
            System.out.print(arr[i][j]);}
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 长征-3 (写于2007年的一首词,纪念当时的那些伙伴们!) 上銹的衣裝 換上 微笑的合影 泛黃 舞台上投入的表情...
    一号森林阅读 242评论 0 0
  • 简介:她仿佛携面具而现,出现再他生活里,让他为之心悸,忍不住靠近。 原来那个总是低着头的少女,终有一天会抬起头...
    琳辰阅读 194评论 0 0
  • 母亲节这天,朋友圈里尽是歌颂母亲的诗词歌赋,岁月荏苒,老母辣妈,孝心爱意,无限美好。我放下手机,抬头看窗外,疾风摇...
    橙子姜阅读 488评论 0 3

友情链接更多精彩内容