1. 程式人生 > 其它 >form表單之select標籤

form表單之select標籤

劍指 Offer 29. 順時針列印矩陣

難度簡單

輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字。

示例 1:

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

示例 2:

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

限制:

  • 0 <= matrix.length <= 100
  • 0 <= matrix[i].length<= 100

很簡單,但還是有要注意的點:

這個矩陣的行數和列數未必相等!從第二個樣例可以看出來。

需要元素總數來判斷是否吧所有元素新增到結果中。

遍歷矩陣需要用到行數和列數,要區分好m和n。

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

我的演算法上升空間還很大,今天面試變形二分沒撕出來。繼續努力吧,專案業務關還是很有信心的,可惜了演算法題了。

好在offer在手,接下來也不慌。