剑指offer(19)顺时针打印出矩阵的元素

package OfferTest;
//顺时针打印矩阵
import java.util.ArrayList;

public class NoNineth {
    
    public static ArrayList<Integer> printMatrix(int[][] matrix){
        ArrayList<Integer> list = new ArrayList<Integer>();
        int tR = 0;
        int tC = 0;
        int dR = matrix.length - 1;//坐标比长度少一
        int dC = matrix[0].length - 1;//下标比长度少一
        while(tR <= dR && tC <= dC){
            if(tR == dR){
                for(int i = tC; i <= dC; i++){
                    list.add(matrix[tR][i]);
                }
            }else if(tC == dC){
                for(int i = tR;i <= dR;i++){
                    list.add(matrix[i][tC]);
                    }
            }else{
                        int curR = tR;
                        int curC = tC;
                        while(curC != dC){
                            list.add(matrix[tR][curC]);
                            curC++;
                        }
                        while(curR != dR){
                            list.add(matrix[curR][dC]);
                            curR++;
                        }
                        while(curC != tC){
                            list.add(matrix[dR][curC]);
                            curC--;
                        }
                        while(curR != tR){
                            list.add(matrix[curR][tC]);
                            curR--;
                        }
                    }
            tR++;tC++;dR--;dC--;
                }
        return list;
            }
    
    public static void main(String[] args){
        int[][] matrix= new int[4][4];
        matrix[0] = new int[]{1,2,3,4};
        matrix[1] = new int[]{5,6,7,8};
        matrix[2] = new int[]{9,10,11,12};
        matrix[3] = new int[]{13,14,15,16};
        for(int i = 0;i < matrix.length;i++){
            System.out.println();
            for(int j = 0;j < matrix[0].length;j++){
                System.out.print(matrix[i][j]+" ");
            }
        }
        ArrayList<Integer> list = printMatrix(matrix);
        System.out.println();
        System.out.println("顺时针打印出的结果是:");
        System.out.println(list);
        
    }

}

全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务