顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

就像这样把他打印出来

一开始还好,到4然后转向,但是会发现,转完一圈之后,是从6开始的!
而且一圈不一定四个方向都有,比如3X3的一个第二圈相当于只有中间那个!

所以我们的思路是,把每一圈的规则写上,然后修改每一圈的起点
比如上图第一圈是1为起点,第二圈是6为起点
而6的位置是1的位置横纵列相加的位置

方法

用while循环保证每一圈的起点合法
内部用四个for循环(后两个还要记得判定是否是最后一行或者最后一列),用列表进行增加,最后去重

源代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int r=matrix.length;
        int c=matrix[0].length;
        if(r==0||c==0)return null;
        //int [][]m;=new int[r][c]
        //左上节点的个数,以一圈为一个轮回,然后将每个轮回读入的数放到一个列表中,然后将原来的置为0;
        ArrayList<Integer>m=new ArrayList<Integer>();
        //start这个作为起始点
        int start=0;
        //这里没有等于
        while(start<r&&start<c){
            for(int j=start;j<c;j++){
                m.add(matrix[start][j]);
            }
            for(int i=start;i<r;i++){
                m.add(matrix[i][c-1]);
            }
            if(start!=r-1){
                for(int j=c-1;j>=start;j--){
                    m.add(matrix[r-1][j]);
                }
            }
            //这里要做判定,因为最后一行或一列在上面就读过了,这里重复了
            if(start!=c-1){
                for(int i=r-1;i>=start;i--){
                    m.add(matrix[i][start]);
                }
            }
            start++;
            r--;
            c--;
        }
       for(int i=0;i<m.size();i++){
            for(int j=i+1;j<m.size();j++){
                if(m.get(i)==m.get(j)){
                    m.remove(j);
                }
            }
        }
        return m;

    }
}
全部评论

相关推荐

昨天 11:18
门头沟学院 Java
作者先叠个甲:本人双非本,秋招拿到了多个大厂offer,这个过程也不容易,但是在看到很多秋招胜利之后说自己一路有多艰辛的文章,总感觉有一点不对劲,想了很久打算写一篇文章分析一下,本文仅代表作者观点,不认同的可以在评论区大家一起理性讨论。&nbsp;秋招已经结束,各类社交平台出现一大批“大厂上岸”胜利结算。文章的叙事逻辑高度相同,开篇就渲染焦虑和困惑,学习时的挑灯夜读、投递时的屡屡碰壁、面试时的如履薄冰,将过往经历包装成一步艰辛的“奋斗史”,然后最终以大厂offer的胜利结尾,字里行间全是苦尽甘来的优越感。但是在我看来,这类文章的本质是结果导向的、带有浮夸的叙事,因为其内核不是分享经验,而是借“苦难”之名...
创作小队长:你的批判视角非常犀利,尤其“结果决定叙事权”的洞察非常精准,哈哈想邀请你来成为我们的创作者🫰 但我想补充一个视角:许多分享者的初衷并非炫耀结果或者苦难,我更愿意相信他们在这个过程中付出了很多,在这场战役结束后,他们迫不及待地想被看到,记录和分享都是给自己的一个交代,而非真的教会别人什么,他们的初衷未必是想制造焦虑。求职市场的残酷、经济环境的下行、世俗价值观才是这种叙事流行的土壤,作为一个普通人无法抵抗洪流。 感谢你发起这场讨论。理想的社区,既需要这样锐利的批判来保持清醒,你的洞察非常犀利,也许会启发一些人,能逐渐改变这种叙事~
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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