leecode第五十四题(螺旋矩阵)-LMLPHP

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int len1=matrix.size();//如果是[[]]边界条件,len1=1,len2=0的,后面虽然边界没有反映,但是依然会返回空数组
if(len1==)
return res;
int len2=matrix[].size();//但如果[]边界条件,len1=0,len2那句话就卡死了,所以这个len1==0的判断要放在求len2前面,错过 if(len1== && len2==)
{
res.push_back(matrix[][]);
return res;
} for(int i=;i<((min(len1,len2)+)/);i++)//根据分析,每一个最外层显示完毕后,下一个是【i,i】为开头的内心的显示,没用递归,嫌麻烦,写成循环了
{
for(int j=i;j<(len2-i);j++)//第一行(从左到右)
res.push_back(matrix[i][j]); if((len1-*i)>)//最后一列(从上到下),注意开头被第一行的尾巴显示过了
{
for(int j=i+;j<(len1-i);j++)
res.push_back(matrix[j][len2--i]);
} if((len2-*i)> && (len1-*i)>)//最后一行(从右往左),注意开头被最后一列的尾巴显示过了
{
for(int j=(len2--i);j>=i;j--)
res.push_back(matrix[len1--i][j]);
} if((len1-*i-)> && (len2-*i)>)//第一列(从下往上),注意开头和结尾都被别人显示过了
{
for(int j=(len1--i);j>i;j--)
res.push_back(matrix[j][i]);
}
//上述这些虽然看起来复杂,但是只要画图,思路清晰就能写出来
//要注意每个判断、索引啥的,都得考虑i的值
//要注意第一行不需要判断,因为一定存在,最后一列只要判断行数够不够即可
//最后一行和第一列要判断行数、列数两个条件都够不够,错过
} return res;
}
};

分析:

如注释,错了两处,惭愧啊,这个还在剑指offer看过,第二个这种错误还能犯,注意力太不集中了,第一个倒是头疼了一下,cout检测过程中突然想到的。

状态不好,晚上还得开周会,今天不做了。

05-11 20:07