【双层loop】题型总结

来源:互联网 发布:丰田车导航软件 编辑:程序博客网 时间:2024/04/30 05:59

Spiral Matrix

 Total Accepted: 11102 Total Submissions: 53832My Submissions

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

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

You should return [1,2,3,6,9,8,7,4,5].

注意m、n作为标识量(or 状态量),控制着循环状态转移

class Solution {public:    vector<int> spiralOrder(vector<vector<int> > &matrix) {        vector<int> res;        int x=-1,y=0;/// @@巧妙设置起点        int n=matrix.size();        if(n==0) return res;         int m=matrix[0].size();                while(m>0&&n>0){            //right            for(int i=0;i<m;i++){                x+=1;                res.push_back(matrix[y][x]);            }            n--;            if(n==0||m==0) break;///@@error:here should have a break condition: n==0 or m==0 all will cause the loop stop            for(int i=0;i<n;i++){                y+=1;                res.push_back(matrix[y][x]);            }            m--;            if(n==0||m==0) break;            for(int i=0;i<m;i++){                x-=1;                res.push_back(matrix[y][x]);            }            n--;            if(n==0||m==0) break;            for(int i=0;i<n;i++){                y-=1;                res.push_back(matrix[y][x]);            }            m--;            if(n==0||m==0) break;        }        return res;    }};

0 0
原创粉丝点击