1. 程式人生 > >【LeetCode】54. 螺旋矩陣 結題報告 (C++)

【LeetCode】54. 螺旋矩陣 結題報告 (C++)

題目描述:

給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

示例 1:

輸入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
輸出: [1,2,3,6,9,8,7,4,5]

示例 2:

輸入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
輸出: [1,2,3,4,8,12,11,10,9,5,6,7]

解題方式:

直接順時針旋轉新增元素,四條邊為一輪。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> re;
        int m = matrix.size();
        if(m == 0) return re;
        int n = matrix[0].size();
        int count = 0;
        
        
        while((n - count*2)*(m - count*2) > 0){
            int i = count, j = count;
            while(j < n - count){
                re.push_back(matrix[i][j++]);
            }
            j --;
            if(++ i >= m - count) break;
            while(i < m - count){
                re.push_back(matrix[i++][j]);
            }
            i --;
            if(-- j < count) break;
            while(j >= count){
                re.push_back(matrix[i][j--]);
            }
            j ++;
            if(-- i <= count) break;
            while(i > count){
                re.push_back(matrix[i--][j]);
            }
            count ++;
        }
        
        return re;
    }
};