您的位置:首页 > 其它

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