JZ19:顺时针打印矩阵

顺时针打印矩阵

http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

图片说明

import java.util.ArrayList;
public class Solution {
    public static  ArrayList<Integer> printClockwiseMatrix(int[][] matrix){
        int sL=0;
        int sR=0;//第一个点(sL,sR)
        int eL=matrix.length-1;
        int eR=matrix[0].length-1;//最后一个点(eL,eR)
        //递归
        ArrayList<Integer> list=new ArrayList<Integer>();
        while(sL<=eL && sR<=eR){
            list=printEdge(matrix,sL++,sR++,eL--,eR--,list);
        }
        return list;
    }

    public static ArrayList<Integer> printEdge(int[][] matrix,int sL,int sR,int eL,int eR,ArrayList<Integer> list){
        if(sL==eL){//只有一行
            for(int i=sR;i<=eR;i++){
                list.add(matrix[sL][i]);
            }
        }
        else if(sR==eR){//只有一列
            for(int i=sL;i<=eL;i++){
                list.add(matrix[i][sR]);
            }
        }
        else{
            int curL=sL;
            int curR=sR;
            while(curR!=eR){//打印1, 2, 3
                list.add(matrix[sL][curR]);
                curR++;
            }
            while(curL!=eL){//打印4, 8, 12,
                list.add(matrix[curL][eR]);
                curL++;
            }
            while(curR!=sR){//打印16, 15, 14, 
                list.add(matrix[eL][curR]);
                curR--;
            }
            while(curL!=sL){//打印13, 9, 5 
                list.add(matrix[curL][sR]);
                curL--;
            }
        }
        return list;
    }
}
剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

有担当的灰太狼又在摸鱼:零帧起手查看图片
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务