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

顺时针打印矩阵

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;

    }


}

全部评论

相关推荐

点赞 评论 收藏
分享
one_t:硕还是本?什么岗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务