WEI-CHENG CHEN

說明

順時針螺旋

解法

class Solution {
public:
    int dir[4][2] = {{0,1}, {1,0}, {0,-1}, {-1,0}}; // 方向順序: 右->下->左->上
    int dir_idx = 0; // 操作dir的
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> ans;
        int m = matrix.size(), n = matrix[0].size();
        int x = 0, y = 0; // 當前位置
        for(int i=0;i<m*n;i++){
            ans.push_back(matrix[x][y]);
            matrix[x][y] = -101; // 標記走過 (元素值是 -100~100,所以用 -101 表示已訪問)

            // 預計下一步的位置
            int temp_x = x + dir[dir_idx][0];
            int temp_y = y + dir[dir_idx][1];

            // 如果要轉向,進函數處理
            if(temp_x < 0 || temp_x >= m || temp_y < 0 || temp_y >= n || matrix[temp_x][temp_y] == -101) {
                dir_idx = (dir_idx + 1) % 4; // 順時針轉向
                temp_x = x + dir[dir_idx][0];
                temp_y = y + dir[dir_idx][1];
            }

            // 實際往下一步
            x = temp_x;
            y = temp_y;

        }
        return ans;
    }
};