form表單之select標籤
阿新 • • 發佈:2021-06-19
劍指 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在手,接下來也不慌。