顺时针打印矩阵

原创 2018年04月17日 19:52:18

题目

顺时针打印矩阵

[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].

解法

public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if(matrix == null || matrix.length == 0) return res;
        int R = matrix.length,C = matrix[0].length;
        boolean[][] seen = new boolean[R][C];
        //di 为方向,共4个方向。当 di = 0 时,dr[di],dc[di]的意思是行不变,列加1,即方向为右;同理,di = 2时表示方向为左。
        //dr dc的设计是顺时针方向,从右开始,4个方向为右,下,左,上
        int[] dr = new int[]{0,1,0,-1};
        int[] dc = new int[]{1,0,-1,0};
        int r = 0,c = 0,di = 0;
        for(int i = 0;i < R * C;i++){
            res.add(matrix[r][c]);
            seen[r][c] = true;
            int cr = r + dr[di];//下一步可能移动的位置的行
            int cc = c + dc[di];//下一步可能移动的位置的列
            if(cr >= 0 && cr < R && cc >= 0 && cc < C && seen[cr][cc] == false){
                r = cr;
                c = cc;
            }
            else{
                di = (di + 1) % 4;
                r += dr[di];//一定在矩阵中,没必要进行判断
                c += dc[di];//同上
            }
        }
        return res;
    }

注:算法题目及解法来源于 leetcode

MFC浅析(6) 对话框数据交换及验证

对话框数据交换及验证
  • FMD
  • FMD
  • 2001-06-16 13:11:00
  • 2333

LeetCode | Spiral Matrix(顺时针打印矩阵)

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or...
  • a45872055555
  • a45872055555
  • 2014-08-11 11:11:34
  • 1029

【剑指offer】顺时针打印矩阵

剑指offer上的第20题,九度OJ上测试通过。 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 1...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-17 12:14:54
  • 3803

【Codewars-snail】顺时针打印矩阵(python)

【题目】 给定一个矩阵,顺时针打印该矩阵 【解法】递归版本def snail(array): return list(array[0]) + snail(zip(*arr...
  • crowhe1993
  • crowhe1993
  • 2016-10-17 21:31:56
  • 844

剑指Offer:面试题20——顺时针打印矩阵(java实现)

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11...
  • lilianforever
  • lilianforever
  • 2016-07-07 10:06:00
  • 1391

顺时针打印矩阵(旋转矩阵)

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:  1   2   3   4  5   6   7   8  9   10 1...
  • yangquanhui1991
  • yangquanhui1991
  • 2016-07-21 11:46:15
  • 689

顺时针打印矩阵(C++版)

题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 如: 输入矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 依次打印出数字 1,2,...
  • u013575812
  • u013575812
  • 2015-11-30 21:04:53
  • 945

Python :顺时针打印矩阵

牛客网上的剑指 offer的在线编程: 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 1...
  • Lynette_bb
  • Lynette_bb
  • 2017-06-18 11:42:11
  • 393

经典算法——顺时针打印矩阵

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1...
  • geekmanong
  • geekmanong
  • 2016-03-09 10:21:48
  • 2044

剑指Offer面试题20:顺时针打印矩阵 Java实现

题目:输入一个矩阵,按照从外向里的顺序依次打印出每一个数字。 例如,输入:  1     2     3       4                      5     6   ...
  • gg543012991
  • gg543012991
  • 2016-09-10 16:52:01
  • 524
收藏助手
不良信息举报
您举报文章:顺时针打印矩阵
举报原因:
原因补充:

(最多只允许输入30个字)