题解 | #顺时针打印矩阵#

顺时针打印矩阵

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

import java.util.ArrayList; public class Solution { static ArrayList resultList = new ArrayList<>();

public ArrayList<Integer> printMatrix(int [][] matrix) {
    //tr为leftTop点的横坐标,tc为leftTop点的纵坐标
    //dr为rightBottom点的横坐标,dc为rightBottom点的纵坐标
    int tr = 0;
    int tc = 0;
    int dr = matrix.length - 1;
    int dc = matrix[0].length - 1;
	//每次都将最外层边界按顺序加入resultList
    while(tr <= dr && tc <= dc){
        getEdge(matrix, tr++, tc++, dr--, dc--);
    }
    return resultList;
}

public static ArrayList<Integer> getEdge(int[][] matrix, int tr, int tc, int dr, int dc){
	//特殊情况1:leftTop点与rightBottom点处于同一行
    if(tr == dr){
        for(int i = tc; i <= dc; i++){
            resultList.add(matrix[tr][i]);
        }
    }
    //特殊情况2:leftTop点与rightBottom点处于同一列
    else if(tc == dc){
        for(int i = tr; i <= dr; i++){
            resultList.add(matrix[i][tc]);
        }
    }
    //正常情况:按照顺序添加即可
    else {
        int curR = tr;
        int curC = tc;
        while(curC != dc){
            resultList.add(matrix[curR][curC]);
            curC++;
        }
        while(curR != dr){
            resultList.add(matrix[curR][curC]);
            curR++;
        }
        while(curC != tc){
            resultList.add(matrix[curR][curC]);
            curC--;
        }
        while(curR != tr){
            resultList.add(matrix[curR][curC]);
            curR--;
        }
    }
    return resultList;
}

}

全部评论

相关推荐

牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
09-08 17:17
同济大学 Java
狗不理fe:里面的人劝一句,别来虾,我们部门24校招生淘汰率30%,还有一些人说有一年保护期,不可能!!!
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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