Leetcode面试经典150题-54.螺旋矩阵

  解法都在代码里,不懂就留言或者私信

这个题可能和算法关联不大,coding技巧为上

class Solution {
    public List spiralOrder(int[][] matrix) {
        /**先定义结果集 */
        List ans = new ArrayList<>();
        /**当前位置从(0,0)开始 */
        int curRow = 0;
        int curCol = 0;
        Set existsSet = new HashSet<>();
        /**direction表示当前运动的方向,理论上应该先往右,左边走不动了往下,下面走不动了往左 
        左边走不动了网上,这里我们定义0,1,2,3分别代表右下左上四个方向*/
        int direction = 0;
        /**count表示矩阵中共有多少个数字 */
        int count = matrix.length * matrix[0].length; 
        ans.add(matrix[0][0]);
        existsSet.add(0);
        /**已经加了一个点 */
        int curCount = 1;
        /**还没有收集够所有的就继续 */
        while(curCount < count) {
            /**根据方向确定下一个点走哪里*/
            int rowNext = curRow;
            int colNext = curCol;
            /**根据方向不同确定行列的变化 */
            switch(direction) {
                case 0: 
                    colNext ++;
                    break;
                case 1: 
                    rowNext ++;
                    break;
                case 2:
                    colNext --;
                    break;
                case 3:
                    rowNext --;
                    break;
            }
            if(!existsSet.contains(rowNext*matrix[0].length + colNext) && rowNext >= 0 && colNext >= 0 && rowNext < matrix.length && colNext < matrix[0].length) {
                curRow = rowNext;
                curCol = colNext;
                 /**把当前位置加进去 */
                ans.add(matrix[curRow][curCol]);
                existsSet.add(curRow*matrix[0].length + curCol);
                curCount ++;
            } else {
                /**如果这个位置已经存在了或者越界了,变向 */
                direction = (direction + 1)%4;
            }
        }
        return ans;
    }   
}

Leetcode面试经典150题-54.螺旋矩阵_第1张图片

你可能感兴趣的:(数据结构与算法,字节跳动高频面试题,leetcode,面试,算法)