Spiral Matrix & Spiral Matrix II & Rotate Image
2014-05-10 19:31
323 查看
Spiral Matrix 又叫蛇形访问,通过每次循环访问一圈后,向里深入一层,关键是需要注意最后剩下一行或者一列的情况
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int >ans;
if(matrix.size()==0)return ans;
int b1=0,b2=0,e2=matrix.size()-1,e1=matrix[0].size()-1;
while(b1<e1&&b2<e2){
for(int i=b1;i<e1;i++)//l to r
ans.push_back(matrix[b2][i]);
for(int i=b2;i<e2;i++)//top to down
ans.push_back(matrix[i][e1]);
for(int i=e1;i>b1;i--)//r to l
ans.push_back(matrix[e2][i]);
for(int i=e2;i>b2;i--)//down to top
ans.push_back(matrix[i][b1]);
b1++;
b2++;
e1--;
e2--;
}
if(b1==e1)while(b2<=e2)ans.push_back(matrix[b2++][b1]);
else if(b2==e2)while(b1<=e1)ans.push_back(matrix[b2][b1++]);
return ans;
}
};Spiral Matrix II 此题和上一题差别不大,因为是正方形,可能还简单一些,按照上面访问的方式读改为写即可
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> >ans;
vector<int >a(n,0);
for(int i=0;i<n;i++){
ans.push_back(a);
}
if(n==0)return ans;
int b1=0,e1=n-1;
int k=1;
while(b1<e1){
for(int i=b1;i<e1;i++){
ans[b1][i]=k;
k++;
}
for(int i=b1;i<e1;i++){
ans[i][e1]=k;
k++;
}
for(int i=e1;i>b1;i--){
ans[e1][i]=k;
k++;
}
for(int i=e1;i>b1;i--){
ans[i][b1]=k;
k++;
}
b1++;
e1--;
}
if(b1==e1)ans[b1][b1]=k;
return ans;
}
};
Rotate Image 类似于Spiral Matrix ,通过先旋转外层,再旋转内层,逐层旋转
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int b=0,e=matrix.size()-1;
if(e<=b)return;
int tmp;
while(b<e){
for(int i=0;i<e-b;i++){
tmp=matrix[b][b+i];
matrix[b][b+i]=matrix[e-i][b];
matrix[e-i][b]=matrix[e][e-i];
matrix[e][e-i]=matrix[b+i][e];
matrix[b+i][e]=tmp;
}
b++;
e--;
}
}
};
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int >ans;
if(matrix.size()==0)return ans;
int b1=0,b2=0,e2=matrix.size()-1,e1=matrix[0].size()-1;
while(b1<e1&&b2<e2){
for(int i=b1;i<e1;i++)//l to r
ans.push_back(matrix[b2][i]);
for(int i=b2;i<e2;i++)//top to down
ans.push_back(matrix[i][e1]);
for(int i=e1;i>b1;i--)//r to l
ans.push_back(matrix[e2][i]);
for(int i=e2;i>b2;i--)//down to top
ans.push_back(matrix[i][b1]);
b1++;
b2++;
e1--;
e2--;
}
if(b1==e1)while(b2<=e2)ans.push_back(matrix[b2++][b1]);
else if(b2==e2)while(b1<=e1)ans.push_back(matrix[b2][b1++]);
return ans;
}
};Spiral Matrix II 此题和上一题差别不大,因为是正方形,可能还简单一些,按照上面访问的方式读改为写即可
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> >ans;
vector<int >a(n,0);
for(int i=0;i<n;i++){
ans.push_back(a);
}
if(n==0)return ans;
int b1=0,e1=n-1;
int k=1;
while(b1<e1){
for(int i=b1;i<e1;i++){
ans[b1][i]=k;
k++;
}
for(int i=b1;i<e1;i++){
ans[i][e1]=k;
k++;
}
for(int i=e1;i>b1;i--){
ans[e1][i]=k;
k++;
}
for(int i=e1;i>b1;i--){
ans[i][b1]=k;
k++;
}
b1++;
e1--;
}
if(b1==e1)ans[b1][b1]=k;
return ans;
}
};
Rotate Image 类似于Spiral Matrix ,通过先旋转外层,再旋转内层,逐层旋转
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int b=0,e=matrix.size()-1;
if(e<=b)return;
int tmp;
while(b<e){
for(int i=0;i<e-b;i++){
tmp=matrix[b][b+i];
matrix[b][b+i]=matrix[e-i][b];
matrix[e-i][b]=matrix[e][e-i];
matrix[e][e-i]=matrix[b+i][e];
matrix[b+i][e]=tmp;
}
b++;
e--;
}
}
};
相关文章推荐
- Array(6) -- Maximum Subarray,Rotate Image,Unique Paths II,Spiral Matrix I, II
- 【C++】【LeetCode】54. Spiral Matrix && 59. Spiral Matrix II
- 细节&数组 Spiral Matrix II
- [LeetCode]-Spiral Matrix I&II 螺旋矩阵
- Spiral Matrix && Spiral MatrixII
- LeetCode解题报告—— Permutations & Permutations II & Rotate Image
- 59. Spiral Matrix && Spiral Matrix II
- LeetCode.54(59) Spiral Matrix && II
- 54. Spiral Matrix && 59. Spiral Matrix II
- leetcode -- Spiral Matrix I&II -- 简单,但需要优化
- Spiral Matrix I & II && Search in Rotated Sorted Array I & II
- LeetCode - Spiral Matrix I && II - Frequent
- <LeetCode OJ> 54 / 59 Spiral Matrix( I / II )
- 旋转数组 I & II Spiral Matrix
- 59. Spiral Matrix II && 54. Spiral Matrix
- spiral-matrix I&II
- [LeetCode] Spiral Matrix、Rotate Image、Spiral Matrix II、Set Matrix Zeroes、Search a 2D Matrix
- leetcode@ [54/59] Spiral Matrix & Spiral Matrix II
- Spiral Matrix I & II
- 54. Spiral Matrix(unsolved) && Spiral MatrixII(unsolved)