1.题目描述
剑指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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if (matrix.empty()) return {};
int m = matrix.size();
int n = matrix[0].size();
vector<int> res(n*m, 0);
int num = 0;
int startx = 0, starty = 0;
int loop = m > n ? n / 2 : m / 2;
int t = loop;
int offset = 1;
while (t--) {
int i = startx;
int j = starty;
for (j = starty; j < n - offset; j++) {
res[num++] = matrix[i][j];
}
for (i = startx; i < m - offset; i++) {
res[num++] = matrix[i][j];
}
for (; j > starty; j--) {
res[num++] = matrix[i][j];
}
for (; i > startx; i--) {
res[num++] = matrix[i][j];
}
startx++;
starty++;
offset += 1;
}
int minLength = m > n ? n : m;
if(minLength - loop * 2) {
int flag = m > n ? 0 : 1;
if(flag) {
for (int k = starty; k < n - loop; k++) {
res[num++] = matrix[startx][k];
}
} else {
for (int k = startx; k < m - loop; k++) {
res[num++] = matrix[k][starty];
}
}
}
return res;
}
};
仅记录,侵权删