zoukankan      html  css  js  c++  java
  • LeetCode: Spiral Matrix

    Title: 

    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].

    思路,其实就是模拟,之前自己写了很久,而且考虑了很多,根本就没有人家几句就写好了。。。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int> > &matrix) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(matrix.size() == 0) return vector<int>();
            int x1 = 0;
            int y1 = 0;
            int x2 = matrix.size()-1;
            int y2 = matrix[0].size()-1;
            vector<int> ans;
            while(x1 <= x2 && y1 <= y2)
            {
                //up row
                for(int i = y1; i <= y2; ++i) ans.push_back(matrix[x1][i]);
                //right column
                for(int i = x1+1; i <= x2; ++i) ans.push_back(matrix[i][y2]);
                //bottom row 用来防止只剩下一行
                if(x2 != x1)
                for(int i = y2-1; i >= y1; --i) ans.push_back(matrix[x2][i]);
                //left column 用来防止只剩下一列
                if(y1 != y2)
                for(int i = x2-1; i > x1; --i) ans.push_back(matrix[i][y1]);
                
                x1++, y1++, x2--, y2--;
            }
    
            return ans;
        }
    };

    Title Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

    For example,
    Given n = 3,

    You should return the following matrix:

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

    class Solution{
    public:
        vector<vector<int> > generateMatrix(int n){
            vector<vector<int> > result;
            if (0 == n){
                return result;
            }
            for (int i = 0 ; i < n; i++){
                vector<int> v(n);
                result.push_back(v);
            }
            int x1 = 0, x2 = n-1,y1 = 0,y2 = n-1;
            int count = 1;
            while (x1 <= x2 && y1 <= y2){
                for (int i = y1; i <= y2; i++){
                    result[x1][i] = count++; 
                }
                for (int i = x1+1; i <= x2; i++)
                    result[i][y2] = count++;
                for (int i = y2-1; i >= y1; i--)
                    result[x2][i] = count++;
                for (int i = x2-1; i >= x1+1; i--)
                    result[i][y1] = count++;
                x1++;y1++;x2--;y2--;
            }
            return result;
        }
    };
  • 相关阅读:
    XMLHttpRequest 跨域问题
    jQuery+AJAX实现纯js分页功能
    PHP验证码
    PHP基础
    UIView易忽略点
    UITableView  优化
    SpringBoard界面层级结构分析
    给App在“设置”中添加选项(类似招行App)
    通过USB线SSH登陆到越狱手机上(命令行模式的),不通过wifi
    在IOS项目中使用Lua
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4462800.html
Copyright © 2011-2022 走看看