顺时针打印矩阵

顺时针打印矩阵

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

Java 解题
定义几个int变量,存储最小行、最大行、最小列、最大列行号、已存入List中的整数的个数(感觉会节约时间,比每次计算List的size);
完成一行的循环,行号进行一次变化(最上方的行循环,对应最小行号加1;最下方的行循环,最大行号减去1);
列循环同理。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       // 行列交替变化
        ArrayList<Integer> resultList = new ArrayList<Integer>();
        int minHang = 0;
        int maxHang = matrix.length;
        int minLie = 0;
        int maxLie = matrix[0].length;
        int totalNum = (maxHang)*(maxLie);
        int existNum = 0;
        if(maxHang==0 && maxLie==0){
            return resultList;
        }

        int j=0;
        int i=0;
        while(existNum<totalNum){
            // 最上边一行,向右
            for(j=minLie; j<maxLie; j++){
                resultList.add(matrix[minHang][j]);
                existNum++;
            }
            minHang++;
            if(existNum==totalNum) {break;}

            // 最右边一列,向下
            for(i=minHang; i<maxHang; i++){
                resultList.add(matrix[i][maxLie-1]);
                existNum++;
            }
            maxLie--;
            if(existNum==totalNum) {break;}

            // 最下边一行向左
            for(j=maxLie-1; j>=minLie; j--){
                resultList.add(matrix[maxHang-1][j]);
                existNum++;
            }
            maxHang--;
            if(existNum==totalNum) {break;}

            // 最左边一列,向上
            for(i=maxHang-1; i>=minHang; i--){
                resultList.add(matrix[i][minLie]);
                existNum++;
            }
            minLie++;
        }

        return resultList;
    }
}
全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
7
收藏
分享
牛客网
牛客企业服务