受疫情影响只能宅家,没有实验室的氛围完全成为一条咸鱼,小论文交给老师也没有回复,在这里记录剑指offer的刷题过程。
这道题又坑我好久的时间,第一是循环的太麻烦了,要一点一点写,而且变量多特别容易混,第二就是空数组的情况,必须要写到最前面,要不就一直runtime error, why?
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
代码是:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result = {};
if (matrix.size() == 0) return result;
int length = matrix.size();//行数
int width = matrix[0].size();//列数
int row = 0;
int col = 0;
int num_ele = length*width;
while(result.size()<num_ele)
{
for(int i = col; i<width; i++)
{
result.push_back(matrix[row][i]);
}
row++;
if (row>=length) break;
for(int j = row; j<length; j++)
{
result.push_back(matrix[j][width-1]);
}
width--;
if (col>=width) break;
for(int k = width; k>col; k--)
{
result.push_back(matrix[length-1][k-1]);
}
length--;
if (row>=length) break;
for(int l = length; l>row; l--)
{
result.push_back(matrix[l-1][col]);
}
col++;
if (col>=width) break;
}
return result;
}
};
没啥技术含量,就一点点写一点点转,比较费时间。