本文主要是介绍**LeetCode 54. Spiral Matrix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://leetcode.com/problems/spiral-matrix/
水题做成这个样子真是说不过去,,
四个变量控制,两个控制左右范围,另个控制上下范围
两种特殊情况,只有一行和一列,因为push_back的时候其实只是考虑了行或者列的情况没有综合考虑 所以容易重复
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <iostream>using namespace std;class Solution {
public:vector<int> spiralOrder( vector<vector<int> >& matrix) {vector <int> ret;if(matrix.size() == 0)return ret;if(matrix.size() == 1)return matrix[0];int left = 0, right = matrix[0].size(),hang=matrix.size(), h0=0;while(ret.size() < matrix.size()*matrix[0].size()) {//upfor(int i=left;i<right;i++)ret.push_back(matrix[h0][i]);if(ret.size() >= matrix.size()*matrix[0].size() ) break;//rightfor(int i=h0+1;i<hang;i++)ret.push_back(matrix[i][right-1]);if(ret.size() >= matrix.size()*matrix[0].size() ) break;//downfor(int i=right-2;i>=left;i--)ret.push_back(matrix[hang-1][i]);if(ret.size() >= matrix.size()*matrix[0].size() ) break;//leftfor(int i=hang-2;i>h0;i--)ret.push_back(matrix[i][left]);left ++;right --;hang --;h0++;}return ret;}
};int main() {//freopen("54.txt", "r", stdin);int n,m, in;while(cin >> n >> m ){vector < vector<int> > mx;for(int i=0;i<n;i++) {vector <int> ivec;for(int j=0;j<m;j++) {cin >> in;ivec.push_back(in);}mx.push_back(ivec);}Solution s;vector <int> ans = s.spiralOrder(mx);for(int i=0;i<ans.size();i++)cout << ans[i] << ", ";cout << endl;}return 0;
}
这篇关于**LeetCode 54. Spiral Matrix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!