题解 | #顺时针打印矩阵#

顺时针打印矩阵

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

//只需要两个变量循环打印就是了,打印一圈过后就需要调整打印的边界和起始点
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> res=new ArrayList<>();
         int n,m;
      
        n=matrix.length;
        m=matrix[0].length;
        //x,y表示打印起始位置
        int x=0;
        int y=0;
      //count表示循环的圈数
        int count=0;
      //sum和all是用来结束循环的,我没有计算打印的圈数,而是统计打印的个数,肯定时间复杂度要高一点
        int sum=0;
        int all=n*m;
        
        while(1==1){
            //表示当前打印的圈数
             x=count;
             y=count;
          //打印横着的第一行
             for(;y<m;y++){
                res.add(matrix[x][y]);
                 sum++;
             }
            
             if(sum>=all)
                break;
            //打印竖立的最后一行,y-=1是因为前面for循环多加了一个1.
             x+=1;y-=1;
             for(;x<n;x++){
                 res.add(matrix[x][y]);
                 sum++;
             }
            
            if(sum>=all)
                break;
            
             y-=1;x-=1;
             for(;y>=count;y--){
                 res.add(matrix[x][y]);
                 sum++;
             }
            
            if(sum>=all)
                break;
             x-=1;y+=1;
            
            //这里打印的圈数加一
             count++;
             for (;x>=count;x--){
                 res.add(matrix[x][y]);
                 sum++;
             }
            if(sum>=all)
                break;
          //调整下一圈打印的边界
             m--;n--;
        }
return res;
    }
}
全部评论
不错,很nice
1 回复 分享
发布于 2021-10-09 12:03

相关推荐

不愿透露姓名的神秘牛友
昨天 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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