zoukankan      html  css  js  c++  java
  • 顺时针打印矩阵 --剑指offer

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.

    思路:

    一共打印(Math.min(m,n)-1)/2+1圈  外循环是这个 circle代表当前打印第几圈了 

    里边有四个循环 分别对应最上边的从左到右打印 最右边的从上往下...... 每个循环的开始和结束位置都是和circle有关 找一下规律

    特殊情况:第三个循环(下边的从右向左打印)  这里可能会出现一个问题 如果最后只剩一行的话 会不会和第一个循环重复打印 所以条件m-1-circle!=circle就是解决这个问题的

    m-1-circle就是当前打印的行 circle是第一个循环打印的行 只要他们两个不想等就可以打印 如果相等那就说明只有一行 那么不打印

    第四个循环同理。

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> printMatrix(int [][] matrix) {
           ArrayList<Integer> result=new ArrayList<>();
           int m=matrix.length;
           int n=matrix[0].length;
           int layers=(Math.min(m,n)-1)/2+1;
            for(int circle =0;circle < layers;circle++){
                for(int j=circle;j<n-circle;j++){
                    result.add(matrix[circle][j]);
                }
                for(int j=circle+1;j<m-circle;j++){
                    result.add(matrix[j][n-1-circle]);
                }
                for(int j=n-2-circle;j>=circle&&(m-1-circle!=circle);j--){ 
                    result.add(matrix[m-1-circle][j]);
                }
                for(int j=m-2-circle;j>=circle+1&&(n-1-circle)!=circle;j--){
                    result.add(matrix[j][circle]);
                }
            }
            return result;
        }
    }
  • 相关阅读:
    spring-mvc dispatcherServlet
    常用注解
    spring基础
    消息转换
    高级装配
    Leetcode第242题:有效的字母异位词
    Leetcode第76题:最小覆盖子串
    Leetcode633题平方数之和
    Leetcode454题四数之和II
    java从虚拟机执行角度解析案例(转)
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12423488.html
Copyright © 2011-2022 走看看