螺旋矩阵

*********

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

示例 2:

思路: 定义left,right,top,bottom四个边界,然后循环,每次循环结束后将边界移动。

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        if(matrix.length==0)
            return new ArrayList<Integer>();
    int left=0;//左边界
    int right=matrix[0].length-1;//右边界
    int top=0;//上边界
    int bottom=matrix.length-1;//下边界
    int x=0;//用来计数
    Integer[] res=new Integer[(right+1)*(bottom+1)];
    while(true){
        //从left到right
        for(int i=left;i<=right;i++) res[x++]=matrix[top][i];
        if(++top>bottom) break;
        //从top到bottom
        for(int i=top;i<=bottom;i++) res[x++]=matrix[i][right];
        if(left>--right)break;
        //从right到left
        for(int i=right;i>=left;i--) res[x++]=matrix[bottom][i];
        if(top>--bottom)break;
        //从bottom到top
        for(int i=bottom;i>=top;i--) res[x++]=matrix[i][left];
        if(++left>right)break;
    }
    return Arrays.asList(res);
    }
}

************

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

class Solution {
    public int[][] generateMatrix(int n) {
        //初始化边界条件
        int left=0;
        int top=0;
        int right=n-1;
        int bottom=n-1;
        //初始化n*n大小的矩阵
        int[][] res=new int[n][n];
        int nums=1;
        int tar=n*n;
        while(true){
            //left to right
            for(int i=left;i<=right;i++) res[top][i]=nums++;
            if(++top>bottom) break;
            //top to bottom
            for(int i=top;i<=bottom;i++) res[i][right]=nums++;
            if(left>--right)break;
            //right to left
            for(int i=right;i>=left;i--) res[bottom][i]=nums++;
            if(top>--bottom)break;
            //bottom to top
            for(int i=bottom;i>=top;i--) res[i][left]=nums++;
            if(++left>right)break;
        }
        return res;
    }
}

全部评论

相关推荐

05-08 22:08
已编辑
中央民族大学 Java
目前可以确定:人才库:后端大池子里,等hr捞短筛选中:hr捞到部门小池子里,等分配面试官长筛选中:分配了面试官,等待面试官发起面试超时:间隔三天,似乎各种状态都是如此,超过三天就会回退,但是只要被操作一下,就可以续约三天,好像token一样,只是不确定会退回到什么流程里。感谢信:一般到了终面挂了的话会有感谢信,默认晚上七点统一发,只要没发就有希望4.3周四挂的,过完清明4.7周一就筛选中了,以为很快能约面,结果这周都快结束了还没有关键是也不释放啊,哪怕挂了也能接受,好歹回人才库里还有别人能捞有相同情况的牛友吗,交流一下4.11周五更新状态图变了,变成没有后续流程的状态图了推测:筛选中也有两种状态,有后续流程和无后续流程,我周一从人才库到筛选中且有后续流程,之后一直没有约面,三个工作日后的今天一看,变成筛选中且无后续流程了。所以可能是有后续流程就是要发起面试,无后续流程就是从人才库的大池子拉到到小池子?4.14周一更新hr打电话来问是否对业务感兴趣,我说感兴趣,他说那给我分配技术官面试,官网状态又从短的筛选中,变成了长的筛选中(就是有后续流程了)4.15周二更新24小时过去了,没有面试邮件,现在难道说现在这个组和上周卡了一周的是一个组,这么忙吗?4.16周三更新约面了,直接约明天周四,不想等了4.17周四更新正常面试,不过面试官比较忙,直接在工位上面的八股比例不多,都是讨论项目场景,顺带问一点点八股4.21周一更新11点挂了,回人才库,等着被捞晚饭吃完发现又筛选中了,被挂的家人们不要着急,还有希望4.25周五更新长筛选间隔三个工作日没有发起面试后过期释放目前观察到的状态是短筛选,应该是在hr手里,但是仍然不知道是换了一个组还是说保持原来的组,因为没有观测到中间有人才库的状态。4.28周一更新仍然保持短筛选,估计hr也忘了,只能等待三个工作日过期,估计得周三了4.29周二更新一志愿结束,进入到二志愿,且短筛选状态一志愿短筛选持续了三天,这一波过期直接导致一志愿流产5.7周三更新二志愿结束,进入三志愿,且短筛选(看来进入到新的志愿的时候默认是短筛选且没有意义)二志愿短筛选持续了三天,看来短筛选只能持续三天,长筛选能持续四天。这样的话,下周一第三个志愿也会过期,这样就能回人才库了,希望回人才库里能被捞(可惜啊,要是周五能被捞,还能过个好周末)
投递美团等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务