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

顺时针打印矩阵

http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a

大一的时候写过这道题目,当时费了老半天劲,第二次写思路就能清晰一点,但是还有一点小bug,在控制方向的时候很容易出错。

变量

  • 方向:
      int left = 0, right = 1, up = 0, down = 0; //等于1时表示往该方向前进
  • 范围:
      colMin = 0, rowMin = 0, rowMax = array.size()-1, colMax = array[0].size()-1;
      // colMin, colMax表示列左右界限下标,row为行。

思路

每次先判断方向,假如:

right == 1;

则向右走,先将col加一,然后push变量。此时进行判断,若已经走到了最右,即:

col == colMax;

则已经走到了最右,该转换方向了,转向下,此时刚刚走过的一行就不会被再次访问了,所以行的上界也要加一。

down = 1;
right = 0;
rowMin++;

代码

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int rowMin = 0, colMin = 0, rowMax = matrix.size()-1, colMax = matrix[0].size()-1;
        int row = 0, col = -1, left = 0, right = 1, up = 0, down = 0;
        int number = (rowMax+1)*(colMax+1);
        vector<int> result;
        while(number--){
            if(left){
                col--;
                result.push_back(matrix[row][col]);
                if(col==colMin){
                    up = 1;
                    left = 0;
                    rowMax--;
                }
                continue;
            }
            else if(right){
                col++;
                result.push_back(matrix[row][col]);
                if(col==colMax){
                    down = 1;
                    right = 0;
                    rowMin++;
                }
                continue;
            }
            else if(up){
                row--;
                result.push_back(matrix[row][col]);
                if(row==rowMin){
                    up = 0;
                    right = 1;
                    colMin++;
                }
                continue;
            }
            else{
                row++;
                result.push_back(matrix[row][col]);
                if(row==rowMax){
                    down = 0;
                    left = 1;
                    colMax--;
                }
                continue;
            }
        }
        return result;
    }
};
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务