剑指offer-19-循环打印数组

顺时针打印矩阵

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

思路

没有什么好的思路

  • 按圈顺时针循环,在纸上画出来各个边界
  • 旋转数组,取第一行,然后递归。然而旋转数组的复杂度比较高。

代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> arr=new ArrayList<>();
        int p=0,q=matrix[0].length-1,h=0,l=matrix.length-1;
        while(p<=q && h<=l){
            if(p==q){
                for(int i=h;i<=l;i++){
                    arr.add(matrix[i][p]);
                }
                break;
            }
            if(h==l){
                for(int i=p;i<=q;i++){
                    arr.add(matrix[h][i]);
                }
                break;
            }

            for(int i=p;i<=q;i++){
                arr.add(matrix[h][i]);
            }
            h++;
            for(int i=h;i<=l;i++){
                arr.add(matrix[i][q]);
            }
            q--;
            for(int i=q;i>=p;i--){
                arr.add(matrix[l][i]);
            }
            l--;
            for(int i=l;i>=h;i--){
                arr.add(matrix[i][p]);
            }
            p++;
        }
        return arr;
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

路过的咸蛋超人也想拿offer:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务