之字形遍历数组
来源:互联网 发布:目前淘宝卖什么最火 编辑:程序博客网 时间:2024/09/21 06:33
之字形遍历数组
题目要求:给丁一峰大小为m*n的矩阵,要求之字形遍历该矩阵,例如:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
应该输出[1,2,5,9,6,3,4,7,10,11,8,12];
解题思路:
给定一个矩阵,我们从第一个元素进行遍历知道最后一个元素,遍历方式无非是以下四种,
step:1
向右移动(这种移动方式只会出现在row==0 || row == mat_rows-1;)
step2:
向右移动之后只会出现两种移动方式:
(1)向左下移动(row++,col–),左下移动之后,又有三种种移动方式,向下移动(col == 0);继续左下移动(col != 0);向右移动(row = mat_rows-1)
(2)向右上移动(row–,col++),右上移动之后,又有两种移动方式,向下移动(col == mat_cols-1),继续向右上移动;向右移动(row==0)
这样我们就遍历了所有的移动方式.
下面我们直接贴代码:
vector<int> zigzagScan(vector<vector<int>> &matrix){ vector<int> result; //当矩阵中的元素为空或者只有一个元素的时候的异常处理 if (matrix.size() == 1 || matrix[0].size() == 0) { return matrix[0]; } //当矩阵中的元素只有一列的时候,直接返回所有元素 if (matrix[0].size() == 1) { for (size_t i = 0; i < matrix.size(); i++) { result.push_back(matrix[i][0]); } return result; } //定义矩阵的行数 int mat_rows = matrix.size(); //定义矩阵的列数 int mat_cols = matrix[0].size(); int row = 0, col = 0; //第一行的第一个元素是向右移的 Move move = moveToRight; //row = n-1&&col = n-1的情况在while循环结束后处理,防止出现越界的情况 while (row != mat_rows - 1 || col != mat_cols - 1) { //将每个元素依次压入到数组中去 cout << matrix[row][col] << ' '; result.push_back(matrix[row][col]); switch (move) { case moveToRight: col++; if (row == 0) move = moveToBottomLeft; else move = moveToTopRight; break; case moveToTopRight: row--; col++; if (row == 0 && col != mat_cols - 1) move = moveToRight; else if (col == mat_cols - 1) move = moveToBottom; else move = moveToTopRight; break; case moveToBottom: row++; if (col == 0) move = moveToTopRight; else move = moveToBottomLeft; break; case moveToBottomLeft: row++; col--; if (col == 0 && row != mat_rows - 1) move = moveToBottom; else if (row == mat_rows - 1) move = moveToRight; else move = moveToBottomLeft; break; } } cout << matrix[mat_rows - 1][mat_cols-1] << ' '; result.push_back(matrix[mat_rows - 1][mat_cols - 1]); return result;}
0 0
- 之字形遍历数组
- 之字形访问数组算法
- 185矩阵的之字形遍历
- 二叉树分层遍历(含之字形打印)
- 层序遍历二叉树VS之字形遍历二叉树
- Binary Tree Zigzag Level Order Traversal 之字形遍历二叉树
- 之字形(Zigzag)遍历/打印/提取矩阵元素算法
- 之字形(Zigzag)遍历/打印/提取矩阵元素算法
- Google算法题:E-之字形遍历(zigzga)
- 二叉树层次遍历(包含之字形遍历也有称之为锯齿遍历)
- 遍历数组
- 遍历数组
- 数组遍历
- 遍历数组
- 遍历数组
- 遍历数组
- 遍历数组
- 数组遍历
- Windows系统下React Native开发环境搭建
- 关于录入的新发现
- java之解析DNS的SRV记录
- 浅谈HTML5离线存储
- 3月份即将来临,新的一天,心得开始
- 之字形遍历数组
- 67. Add Binary
- hive 虚拟机下执行 HQL 被killed退出
- linux下如何卸载opencv
- 再论数据科学竞赛中的Data Leakage
- LeetCode之路——Palindrome Number
- ViewPager异常总结
- LeetCode-190. Reverse Bits
- Android单元测试环境配置指南