美文网首页Leetcode
Leetcode.54.Spiral Matrix

Leetcode.54.Spiral Matrix

作者: Jimmy木 | 来源:发表于2019-08-14 10:43 被阅读0次

    题目

    给出一个二维数组, 让二维数组顺时针螺旋输出.

    Input: [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
    Output: [1,2,3,4,8,12,11,10,9,5,6,7]
    

    思路1

    计算拐点, 确定方向. 但是计算比较复杂, 顺序是顺时针, 因此方向是有规律的, 只要找出拐点, 就可以确定方向.

    不同规模的数组拐点判断不一样.

    vector<int> spiralOrder(vector<vector<int>>& matrix) {
      vector<int> result;
      int m = matrix.size();
      if (m == 0) {
          return result;
      }
      int n = matrix[0].size();
      if (n == 0){
          result = matrix[0];
          return result;
      }
    
      int direction = 0,count = 1;
      int row = 0, col = 0;
      int maxRow = m - 1;
      int maxCol = n - 1; 
      int minRow = 0;
      int minCol = 0; 
      result.push_back(matrix[row][col]);
      while(count < m * n) {
        if (direction == 0 && col == maxCol) {
            minRow++;
            direction++; 
        }else if (direction == 1 && row == maxRow) {
            maxCol--;
            direction++; 
        }else if (direction == 2 && col == minCol) {
            maxRow--;
            direction++; 
        }else if (direction == 3 && row == minRow) {
            minCol++;
            direction++; 
        }
        direction = direction % 4;
        switch (direction)
        {
        case 0:
            col++;
            break;
        case 1:
            row++;
            break;
        case 2:
            col--;
            break;
        case 3:
            row--;
            break;
        default:
            break;
        }
        result.push_back(matrix[row][col]);
        count ++;
      }
      return result;
    }
    

    总结

    考虑边界, 确保index不会出现负数, 应该使用unsigned防止负数.

    相关文章

      网友评论

        本文标题:Leetcode.54.Spiral Matrix

        本文链接:https://www.haomeiwen.com/subject/gnnwjctx.html