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

顺时针打印矩阵

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

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {

        int col = matrix[0].length;
        ArrayList<Integer> list = new ArrayList<>();
        String dir = "右";
        if (col == 0 && matrix.length == 1) {
            // 应付搞破坏代码
            return list;
        }

        int count = 0;
        int i = 0;
        int j = 0;
        list.add(matrix[0][0]);
        matrix[i][j] = -1;

        while (count < 4) {
            
            if ("右".equals(dir)) {

                if (j + 1 == col || matrix[i][j + 1] == -1) {
                    dir = get(dir);
                    count++;
                } else {
                    list.add(matrix[i][j + 1] );
                    System.out.println("向右遍历到" + matrix[i][j + 1]);
                    matrix[i][j + 1] = -1;
                    j = j + 1;
                    count = 0;
                }

            } else if ("下".equals(dir)) {

                if (i + 1 == matrix.length || matrix[i + 1][j] == -1) {
                    dir = get(dir);
                    count ++;
                } else {
                    list.add(matrix[i + 1][j] );
                    System.out.println("向下遍历到" + matrix[i + 1][j]);
                    matrix[i + 1][j] = -1;
                    i = i + 1;
                    count = 0;
                }

            } else if ("上".equals(dir)) {

                if (i == 0 || matrix[i - 1][j] == -1) {
                    dir = get(dir);
                    count ++;
                } else {
                    list.add(matrix[i - 1][j] );
                    System.out.println("向上遍历到" + matrix[i - 1][j]);
                    matrix[i - 1][j] = -1;
                    i = i - 1;
                    count = 0;
                }

            } else if ("左".equals(dir)) {

                if (j == 0 || matrix[i][j - 1] == -1) {
                    dir = get(dir);
                    count ++;
                } else {
                    list.add(matrix[i][j - 1] );
                    System.out.println("向左遍历到" + matrix[i][j - 1]);
                    matrix[i][j - 1] = -1;
                    j = j - 1;
                    count = 0;
                }
            }
        }

        return list;
    }

    public static String get(String lastdir) {

        String dir = lastdir;
        if ("上".equals(lastdir)) {
            return "右";
        }
        if ("右".equals(lastdir)) {
            return "下";
        }
        if ("下".equals(lastdir)) {
            return "左";
        }
        if ("左".equals(lastdir)) {
            return "上";
        }
        return null;

    }


}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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