zoukankan      html  css  js  c++  java
  • [LeetCode] Spiral Matrix II

    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 ]
    ]
    
    Hide Tags
     Array
     

    思路:在Spiral Matrix的基础上进行修改,还是dfs

    class Solution {
        enum direct{RIGHT = 0, DOWN, LEFT, UP};
        vector<int> m_res;
        vector<vector<int> > m_matrix;
        vector<vector<bool> > m_valid;
        int m_cnt;
        public:
            void dfs(int i, int j, enum direct d)  
            {   
                int row = m_matrix.size();
                int col = m_matrix[0].size();
    
                //cout << i <<",	" << j << endl;
                m_cnt++;
                m_matrix[i][j] = m_cnt;
                m_valid[i][j] = false;
    
                if(d == RIGHT)
                {
                    if( j <= col-2 && m_valid[i][j+1])
                        dfs(i, j+1, RIGHT);
                    else if(i <= row-2 && m_valid[i+1][j])
                        dfs(i+1, j, DOWN);
                }
                else if(d == DOWN)
                {
                    if(i <= row-2 && m_valid[i+1][j])
                        dfs(i+1, j, DOWN);
                    else if(j >= 1 && m_valid[i][j-1])
                        dfs(i, j-1, LEFT);
                }
                else if(d == LEFT)
                {
                    if(j >= 1 && m_valid[i][j-1] )
                        dfs(i, j-1, LEFT);
                    else if(i >= 1 && m_valid[i-1][j])
                        dfs(i-1, j, UP);
                }
                else if(d == UP)
                {
                    if(i >= 1 && m_valid[i-1][j])
                        dfs(i-1, j, UP);
                    else if(j <= col-1 && m_valid[i][j+1])
                        dfs(i, j+1, RIGHT );
                }
            }
    public:
            vector<vector<int> > generateMatrix(int n)
            {
                if(n == 0)
                    return m_matrix;
    
                // construct the matrix
                vector<int> row(n, 0);
                m_matrix.resize(n, row);
                //for(int i = 0; i < n; i++)
                //    m_matrix.push_back(row);
    
                vector<bool> valid(n, true);
                m_valid.resize(n, valid);
                //for(int i = 0; i < n; i++)
                //    m_valid.push_back(valid);
    
                m_cnt = 0;
    
                dfs(0, 0, RIGHT);
    
                return m_matrix;
            }
    };
  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/diegodu/p/4318326.html
Copyright © 2011-2022 走看看