美文网首页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