java实现,一圈一圈从外向内打印,每一圈分成上右下右四个一维数组,注意边界和不要多余打印

顺时针打印矩阵

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

import java.util.ArrayList;
public class Solution {

    ArrayList<Integer> ans = new ArrayList<>();

    /**
     * 最外层一个while循环,
     * 每层分为上,右,下,左四个一维数组打印,
     */
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int rs = 0;
        int cs = 0;
        int re = matrix.length-1;
        int ce = matrix[0].length-1;
        while (re>=rs && ce>=cs){
            print(matrix,rs++,re--,cs++,ce--);
        }
        return ans;
    }

    public void print(int [][] matrix, int rs,int re, int cs, int ce){
        // 第一行
        for (int i= cs; i<=ce;i++){
            ans.add(matrix[rs][i]);
        }
        for (int i= rs+1; i<=re;i++){
            ans.add(matrix[i][ce]);
        }
        // 最后一行
        if (re>rs){
            for (int i= ce-1; i>=cs;i--){
                ans.add(matrix[re][i]);
            }
        }
        // 最后一列
        if (ce>cs){
           for (int i= re-1; i>=rs+1;i--){
                ans.add(matrix[i][cs]);
            }
        }
    }
}
全部评论

相关推荐

12-14 22:54
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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