54. Spiral Matrix&59. Spiral Matrix II
2016-11-18 20:52
369 查看
这两道题其实很类似……一个是给定二维矩阵,逐个读取其中的数字,另一个是给定数字,逐个插入一个二维数组。
其实套路就是设置四个指针,分别指向最前面和最后面的行,最前面和最后面的列。插入之后更新。
54
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return {};
int i=0,j=matrix.size()-1,start=0,end=matrix[0].size()-1;
vector<int> res;
while(i<=j&&start<=end){
for(int k=start;k<=end;k++) {res.push_back(matrix[i][k]);}
i++;
if(i>j) break;
for(int k=i;k<=j;k++) {res.push_back(matrix[k][end]); }
end--;
if(end<start) break;
for(int k=end;k>=start;k--) {res.push_back(matrix[j][k]);}
j--;
for(int k=j;k>=i;k--) {res.push_back(matrix[k][start]);}
start++;
//i++;j--;start++;end--;
}
return res;
}
};
59
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n, vector<int> (n));
int index=1,top=0,bottom=n-1,head=0,tail=n-1;
while(index<=n*n&&bottom>=top&&head<=tail){
for(int i=head;i<=tail;i++){ans[top][i]=index++;} top++;
for(int i=top;i<=bottom;i++){ans[i][tail]=index++;} tail--;
for(int i=tail;i>=head;i--){ans[bottom][i]=index++;} bottom--;
for(int i=bottom;i>=top;i--){ans[i][head]=index++;} head++;
}
return ans;
}
};
其实套路就是设置四个指针,分别指向最前面和最后面的行,最前面和最后面的列。插入之后更新。
54
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return {};
int i=0,j=matrix.size()-1,start=0,end=matrix[0].size()-1;
vector<int> res;
while(i<=j&&start<=end){
for(int k=start;k<=end;k++) {res.push_back(matrix[i][k]);}
i++;
if(i>j) break;
for(int k=i;k<=j;k++) {res.push_back(matrix[k][end]); }
end--;
if(end<start) break;
for(int k=end;k>=start;k--) {res.push_back(matrix[j][k]);}
j--;
for(int k=j;k>=i;k--) {res.push_back(matrix[k][start]);}
start++;
//i++;j--;start++;end--;
}
return res;
}
};
59
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n, vector<int> (n));
int index=1,top=0,bottom=n-1,head=0,tail=n-1;
while(index<=n*n&&bottom>=top&&head<=tail){
for(int i=head;i<=tail;i++){ans[top][i]=index++;} top++;
for(int i=top;i<=bottom;i++){ans[i][tail]=index++;} tail--;
for(int i=tail;i>=head;i--){ans[bottom][i]=index++;} bottom--;
for(int i=bottom;i>=top;i--){ans[i][head]=index++;} head++;
}
return ans;
}
};
相关文章推荐
- 59. Spiral Matrix II
- LeetCode 59: Spiral Matrix II
- leetcode 59. Spiral Matrix II
- Leetcode59 Spiral Matrix II
- 59. Spiral Matrix II
- LeetCode54/59 Spiral Matrix I/II
- Leetcode 59 Spiral Matrix II
- [C语言][LeetCode][59]Spiral Matrix II
- 59. Spiral Matrix II
- [LeetCode OJ]59. Spiral Matrix II
- LeetCode-59-Spiral Matrix II(Array)-Medium
- LeetCode 59 Spiral Matrix II
- [59] Spiral Matrix II
- Leetcode 59. Spiral Matrix II
- 【C++】【LeetCode】54. Spiral Matrix && 59. Spiral Matrix II
- 【leetcode】Array——Spiral MatrixII(59)
- LeetCode_59---Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II