leetcode第一刷_Spiral Matrix
阿新 • • 發佈:2017-06-01
dsm 問題 leetcode row 註意 ++ 避免 solution 退出
我認為這個題好無聊啊,好端端一個數組。幹嘛要跟比巴蔔一樣轉一圈輸出呢。
。
思想非常easy,每次從左到右。再從上到下,在從右到左,再從下到上。問題是每次到什麽時候該改變方向。我的做法是用一個變量保存當前在第幾層。這個層是相對於從外向內有幾圈來說的。註意想清楚邊界的話這個題一點也不難。有個細節,我的循環退出條件是訪問的數跟矩陣總個數之間的關系,假設有一次在推斷進入循環是條件是滿足的。可是在循環內部不滿足了,我的策略是忽略這樣的情況。盡管這樣會在結果集中多加一些反復的數據,可是以我的算法。一定是先訪問沒有訪問過的數據。再訪問反復數據的,因此能夠回退回去。避免了考慮每次在循環裏都考慮有沒有到達越界的情況。
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { int msize = matrix.size(); vector<int> res; if(msize == 0) return res; if(msize == 1) return matrix[0]; int cur = 0, row = msize, column = matrix[0].size(), i=0, j=0, level = 0; while(cur<row*column){ while(j<column-level) {res.push_back(matrix[i][j++]); ++cur;} --j;++i; while(i<row-level) {res.push_back(matrix[i++][j]); ++cur;} --j;--i; while(j>=level) {res.push_back(matrix[i][j--]); ++cur;} ++j;--i; while(i>level) {res.push_back(matrix[i--][j]); ++cur;} ++j;++i; ++level; } while(cur>row*column){ res.pop_back(); cur--; } return res; } };
leetcode第一刷_Spiral Matrix