生成螺旋矩阵(方阵、矩阵)
2016-04-07 10:11
295 查看
54. Spiral Matrix
My SubmissionsQuestion
Editorial Solution
Total Accepted: 56094 Total
Submissions: 250811 Difficulty: Medium
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].
Subscribe to see which companies asked this question
方法:
(1)从外环开始,每次生成矩阵的一个环数据
(2)然后更新环的起点和大小(行数和列数)
vector<vector<int>> generateMatrix(int m, int n) { vector<vector<int>> res(m, vector<int>(n)); int num_row = m, row_start = 0; int num_col = n, col_start = 0; int k = 1; while (num_row > 0 && num_col > 0) { //上边 for (int i = 0; i < num_col; ++i) res[row_start][col_start + i] = k++; //右边 for (int i = 1; i < num_row; ++i) res[row_start + i][col_start + num_col - 1] = k++; //下边,因为第一个 for 已经至少遍历了上边一行,若 num_row > 1 才可能执行本 for 循环 for (int i = num_col - 2; i >= 0 && num_row > 1; --i) res[row_start + num_row - 1][col_start + i] = k++; //左边,因为第二个 for 已经至少遍历了右边一列,若 num_col > 1 才可能执行本 for 循环 for (int i = num_row - 2; i >= 1 && num_col > 1; --i) res[row_start + i][col_start] = k++; //缩小一个单位的外环 num_row -= 2; num_col -= 2; ++row_start; ++col_start; } return res; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析