Leetcode 59. Spiral Matrix II
2016-12-10 00:00
330 查看
题目描述
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 { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > ret; if(n == 0) return ret; ret = vector<vector<int> > (n, vector<int>(n, 0)); int count = 0; int size = n * n; int rmin, rmax, cmin, cmax; rmin = cmin = 0; rmax = cmax = n - 1; while(1) { for(int c = cmin; c <= cmax; c++) { ret[rmin][c] = ++count; if(count >= size) return ret; } for(int r = rmin + 1; r <= rmax; r++) { ret[r][cmax] = ++count; if(count >= size) return ret; } for(int c = cmax - 1; c >= cmin; c--) { ret[rmax][c] = ++count; if(count >= size) return ret; } for(int r = rmax - 1; r > rmin; r--) { ret[r][cmin] = ++count; if(count >= size) return ret; } cmin++, rmin++, cmax--, rmax--; } } };
2. 状态机求解:
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > ret; if(n == 0) return ret; ret = vector<vector<int> >(n, vector<int>(n, 0)); int size = n * n; int top = 0, bottom = n - 1, left = 0, right = n - 1; int count = 0; int r = 0, c = 0, direction = 0; while(count < size) { switch(direction) { //topLeft->topRight case 0: ret[r][c++] = ++count; //beyond the bounder, turn direction, turn to next position if(c > right) { c--, r++; direction = 1; top++; } break; //rightTop -> rightBottom case 1: ret[r++][c] = ++count; if(r > bottom) { r--, c--; right--; direction = 2; } break; //BottomRight -> bottomLeft case 2: ret[r][c--] = ++count; if(c < left) { c++, r--; bottom--; direction = 3; } break; //leftBottom -> leftTop case 3: ret[r--][c] = ++count; if(r < top) { r++, c++; left++; direction = 0; } } } return ret; } };
相关文章推荐
- leetcode[59]Spiral Matrix II
- LeetCode 59. Spiral Matrix II
- 个人记录-LeetCode 59. Spiral Matrix II
- Leetcode:59. Spiral Matrix II
- (Java)LeetCode-59. Spiral Matrix II
- 【LEETCODE】59-Spiral Matrix II
- Leetcode 59. Spiral Matrix II
- 【leetcode】Array——Spiral MatrixII(59)
- leetcode——59——Spiral Matrix II
- leetcode-java-59. Spiral Matrix II
- [Leetcode] 59. Spiral Matrix II
- 59. Spiral Matrix II Leetcode Python
- leetcode ----59. Spiral Matrix II
- LeetCode-59-Spiral Matrix II(Array)-Medium
- LeetCode 59 - Spiral Matrix II
- Leetcode59 Spiral Matrix II
- leetcode 59:Spiral Matrix II
- leetcode 59. Spiral Matrix II
- LeetCode 59 --- Spiral Matrix II
- leetcode-59 Spiral Matrix II