顺时针打印矩阵

顺时针打印矩阵

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;
    }
}
全部评论

相关推荐

08-08 16:33
唐山学院 Java
职场水母:首先,简历太长,对于实习和应届找工作,hr一眼扫的是学历,技术看实习,你写的技术栈字太多了,尽量用一句话概括不用写那么详细,技术面的时候会问的,而且技术栈都会在实习或者项目里体现,你要做的是,把你的简历浓缩为一页,删除没用的东西,比如实践经历,自我评价,这些纯废话,没用,专业技能写的太离谱,你真的熟练掌握了吗,建议都写熟悉,找工作和写论文不一样,追求的是干练和实用,把实习经历和项目提前,把掌握的技术栈写到最后,然后去找实习,
点赞 评论 收藏
分享
Hyh_111:像这种hr就不用管了,基本没啥实力,换一个吧
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

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