力扣:劍指 Offer 29. 順時(shí)針打印矩陣
題目:
劍指 Offer 29. 順時(shí)針打印矩陣
難度簡(jiǎn)單509收藏分享切換為英文接收動(dòng)態(tài)反饋
輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。
?
示例 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
注意:本題與主站 54 題相同:https://leetcode-cn.com/problems/spiral-matrix/
第一種對(duì)法:
class?Solution?{
public:
????vector<int>?spiralOrder(vector<vector<int>>&?matrix)?{
????????if(matrix.size()==0||matrix[0].size()==0){
????????????return?{};
????????}
????????vector<int>?s;
????????int?col=matrix[0].size();
????????int?row=matrix.size();
????????int?right,left,top,bottom;
????????right=col-1,left=0;
????????top=0,bottom=row-1;
????????int?cnt=0;
????????while(right>=left&&top<=bottom){
????????????for(int?i=left;i<=right;i++){
????????????????s.push_back(matrix[top][i]);
????????????????cnt++;
????????????????if(cnt==col*row){
????????????????????return?s;
????????????????}
????????????}
????????????for(int?i=top+1;i<=bottom;i++){
????????????????s.push_back(matrix[i][right]);
????????????????cnt++;
????????????????if(cnt==col*row){
????????????????????return?s;
????????????????}
????????????}
????????????for(int?i=right-1;i>=left;i--){
????????????????s.push_back(matrix[bottom][i]);
????????????????cnt++;
????????????????????if(cnt==col*row){
????????????????????????return?s;
????????????????????}
????????????}
????????????for(int?i=bottom-1;i>top;i--){
????????????????s.push_back(matrix[i][left]);
????????????????cnt++;
????????????????????if(cnt==col*row){
????????????????????????return?s;
????????????????????}
????????????}
????????????left++,right--;
????????????top++,bottom--;
????????}
????????return?s;
????}
};
注意細(xì)節(jié):不要把橫或列搞錯(cuò),不要把循環(huán)寫錯(cuò)