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

    class Solution {
        public:
                vector<vector<int> > generateMatrix(int n) {
                    vector<vector<int> > matrix;
                    if (n < 1) return matrix;
    
                    for (int i=0; i<n; i++) {
                        matrix.push_back(vector<int>(n, 0));
                    }
                    int left = 0, top = 0, right = n - 1, bottom = n - 1;
                    int last = 1;
                    while (left <= right && top <= bottom) {
                        last = circle_walk(last, left, top, right, bottom, matrix);
                        left++, top++, bottom--, right--;
                    }
                    return matrix;
                }
    
                int circle_walk(int start, int left, int top, int right, int bottom, vector<vector<int> >& map) {
                        int rows = 0;
                        if (map.size() < 1 || map[0].size() < 1) return start;
                                
                        // top row
                        for (int i=left; i<=right; i++) {
                            map[top][i] = start++;
                        }
    
                        // right col
                        for (int i=top+1; i<=bottom; i++) {
                           map[i][right] = start++;
                        }
                        
                        // bottom row
                        for (int i=right-1; bottom != top && i>=left; i--) {
                            map[bottom][i] = start++;
                        }
    
                        // left col
                        for (int i=bottom-1; left != right && i>top; i--) {
                            map[i][left] = start++;
                        }
                        return start;
                }
    };

    再水一发

    第二轮:

    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 ]
    ]
     1 class Solution {
     2 public:
     3     vector<vector<int> > generateMatrix(int n) {
     4         vector<vector<int> > matrix(n, vector<int>(n, 0));
     5         
     6         if (n < 1) {
     7             return matrix;
     8         }
     9         
    10         int xn = n;
    11         int yn = n;
    12         
    13         int col = -1;
    14         int row = 0;
    15         
    16         int seq = 1;
    17         
    18         while (true) {
    19             for (int i=0; i<xn; i++) matrix[row][++col] = seq++;        
    20             if (--yn == 0) break;
    21             
    22             for (int i=0; i<yn; i++) matrix[++row][col] = seq++;
    23             if (--xn == 0) break;
    24             
    25             for (int i=0; i<xn; i++) matrix[row][--col] = seq++;
    26             if (--yn == 0) break;
    27             
    28             for (int i=0; i<yn; i++) matrix[--row][col] = seq++;
    29             if (--xn == 0) break;
    30         }
    31         
    32         return matrix;
    33     }
    34 };
  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/lailailai/p/3755265.html
Copyright © 2011-2022 走看看