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

顺时针打印矩阵

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

相关推荐

01-02 16:50
门头沟学院 Java
不放弃的小鱼干很洒脱:比kpi面面完了也不发感谢信全靠自己猜的好多了
点赞 评论 收藏
分享
秋招之BrianGriffin:你再跟他说华为工资也低(相对互联网)就可以享受私信爆炸了😋
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务