Spiral Matrix II问题及解法

来源:互联网 发布:让人惊艳的古诗词知乎 编辑:程序博客网 时间:2024/06/11 18:33

问题描述:

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

示例:
Given n = 3,

You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
问题分析:

该题目与Spiral Matrix题目原理一致,这里不多赘述。


过程详见代码:

class Solution {public:    vector<vector<int>> generateMatrix(int n) {        if (n == 0) return vector<vector<int>>{};int num = n * n;int dict = 0; // right - 0; down -  1; left - 2; up - 3int row = 0, col = 0;vector<vector<int>> used(n, vector<int>(n, 0));for (int i = 1; i <= num;){switch (dict){case 0:if (col < n){if (!used[row][col]){used[row][col] = i;col++;i++;}else{dict = (dict + 1) % 4;row++;col--;}}else{col--;dict = (dict + 1) % 4;row++;}break;case 1:if (row < n){if (!used[row][col]){used[row][col] = i;row++;i++;}else{dict = (dict + 1) % 4;col--;row--;}}else{row--;dict = (dict + 1) % 4;col--;}break;case 2:if (col >= 0){if (!used[row][col]){used[row][col] = i;col--;i++;}else{dict = (dict + 1) % 4;col++;row--;}}else{col++;row--;dict = (dict + 1) % 4;}break;case 3:if (row >= 0){if (!used[row][col]){used[row][col] = i;row--;i++;}else{dict = (dict + 1) % 4;row++;col++;}}else{dict = (dict + 1) % 4;row++;col++;}break;}}return used;    }};


原创粉丝点击