顺时针输出矩阵数据

顺时针打印矩阵

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

螺旋遍历,有四个方向,每个方向坐标的变化是不同的。x或y的加一减一。
遇到边界或者遍历过的位置,要变方向。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int curDirect = 0;
        int curX = 0;
        int curY = 0;
        int h = matrix.length;
        int w = matrix[0].length;
        int[][] flag = new int[h][w];
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                flag[i][j] = 0;
            }
        }

        ArrayList<Integer> arr = new ArrayList<>();
        for(int i=0;i<h*w;i++){
            arr.add(matrix[curX][curY]);
            flag[curX][curY] = 1;
            if(curDirect==0){
                if(curY+1>=w||flag[curX][curY+1]==1){
                    curX+=1;
                    curDirect = 1;
                }else {
                    curY+=1;
                }
            }else if(curDirect==1){
                if(curX+1>=h||flag[curX+1][curY]==1){
                    curY-=1;
                    curDirect = 2;
                }else {
                    curX+=1;
                }
            }else if(curDirect==2){
                if(curY-1<0||flag[curX][curY-1]==1){
                    curX-=1;
                    curDirect = 3;
                }else {
                    curY-=1;
                }
            }else if(curDirect==3){
                if(curX-1<0||flag[curX-1][curY]==1){
                    curY+=1;
                    curDirect = 0;
                }else {
                    curX-=1;
                }
            }
        }
        return arr;
    }
}
全部评论

相关推荐

野猪不是猪🐗:还是太卑微了,什么叫放弃本次面试应该说经过评估,贵公司与自己不匹配,决定不再推进后续流程
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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