剑指offer-顺时针打印矩阵

匆匆过客 提交于 2020-02-05 06:31:29

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路
取两个边界条件就好了,请务必注意边界条件,如果考这道题,就是看你注不注意细节

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        int lr = 0;
        int lc = 0;
        int rr = m-1;
        int rc = n-1;
        ArrayList<Integer> res = new ArrayList<>();
        while(lr <= rr&&lc <= rc){
            printMatrix(res,matrix,lr++,lc++,rr--,rc--);
        }
        return res;
	}
    public void printMatrix(ArrayList<Integer> res,int[][] matrix,int lr,int lc,int rr,int rc){
        if(rr == lr){
            for(int i = lc;i <= rc;i++){
                res.add(matrix[rr][i]);            
            } 
            return;
        }
        if(rc == lc){
            for(int i = lr;i <= rr;i++){
                res.add(matrix[i][rc]);             
            }
            return;
        }
        for(int i = lc;i < rc;i++){//开头是lc,不是0,要记住,后面一样
            res.add(matrix[lr][i]);
        }
        for(int i = lr;i < rr;i++){
            res.add(matrix[i][rc]);
        }
        for(int i = rc;i > lc;i--){
            res.add(matrix[rr][i]);
        }
        for(int i = rr;i > lr;i--){
            res.add(matrix[i][lc]);
        }
    }
    
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!