您的位置:首页 > 其它

LintCode 螺旋矩阵 (新解法)

2015-11-28 17:46 531 查看
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。

您在真实的面试中是否遇到过这个题? 

Yes

样例

给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

应返回 
[1,2,3,6,9,8,7,4,5]

有趣的新解法思路:由当前坐标通过简单的逻辑分析可得下一个坐标

class Solution {
public:
/**
* @param matrix a matrix of m x n elements
* @return an integer array
*/
vector<int> spiralOrder(vector<vector<int>&g
4000
t;& matrix) {
// Write your code here
vector<int> res;
if(matrix.size() == 0)
return res;

const int m = matrix.size();
const int n = matrix[0].size();

bool flag[m]
;

int coord[2] = {0};
int screw[m]
;
for(int i = 0; i <= m * n; i++)
{
flag[(i - 1) / n][(i - 1) % n] = 0;

}

for(int i = 1; i <= m * n; i++ )
{
res.push_back(matrix[coord[0]][coord[1]]);
//screw[coord[0]][coord[1]] = matrix[(i - 1) / 4][(i - 1) % 4] ;
//cout<<"("<<coord[0]<<","<<coord[1]<<")->"<<endl;
if( coord[1] + 1 < n && flag[coord[0]][coord[1] + 1] != 1)
{
if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]--;
}
else
{
flag[coord[0]][coord[1]] = 1;
coord[1]++;
}
}
else if(coord[0] + 1 < m && flag[coord[0] + 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]++;
}
else if( coord[1] - 1 >= 0 && flag[coord[0]][coord[1] - 1] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[1]--;
}
else if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]--;
}
else
flag[coord[0]][coord[1]] = 1;
}

return res;

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  刷题