62、【数组】leetcode——54. 螺旋矩阵:N*M型(C++版本)
2023-09-11 14:20:01 时间
题目描述
采用收缩边界的方式,每遍历完一侧,收缩一侧边界。因为为N*M型,所以每次遍历时,需判定边界的相对位置,只有在合法位置才进行遍历,否则可能会有多余的数被统计。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int n = matrix.size(), m = matrix[0].size(); // 分别获取持长、宽
vector<int> res;
int left = 0, right = m - 1, top = 0, buttom = n - 1;
int count = 0;
while(left <= right && top <= buttom){
if(top <= buttom){ // 注意这里要判定边界相对位置,因为n * m型,若不加这个判定,可能会有多余的数被统计
for(int i = left; i <= right; i++) res.push_back(matrix[top][i]);
top++;
}
if(left <= right){
for(int i = top; i <= buttom; i++) res.push_back(matrix[i][right]);
right--;
}
if(top <= buttom){
for(int i = right; i >= left; i--) res.push_back(matrix[buttom][i]);
buttom--;
}
if(left <= right){
for(int i = buttom; i >= top; i--) res.push_back(matrix[i][left]);
left++;
}
}
return res;
}
};
原题链接:54. 螺旋矩阵
参考文章:螺旋矩阵
相关文章
- Kinect SDK C++ - 2. Kinect Depth Data
- 【C/C++学院】(12)C++标准模板库STL
- 牛客网 C++ 输入、输出常用格式
- leetcode 10 正则表达式匹配(c++)
- C++ 设置控制台文本属性画一个DOS时代的字符窗口
- 【面试攻略】C++面试-盛大
- 【华为OD机试 2023】 最大报酬(C++ Java JavaScript Python)
- C++学习心得与c语言到c++衔接技巧
- 解答私信@被c++折磨头秃的花季美少女 //C++ 写一个带命令行参数的程序,可以实现将参数求和、求平均值以及排序之后输出(参数的数量不确定)。
- LeetCode 4. 寻找两个正序数组的中位数(执行用时: 20 ms , 在所有 C++ 提交中击败了 94.05% 的用户)
- 从两个排序算法实现c++策略模式
- c++ vector 初始化_C++--vector()的用法
- [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
- C++使用技巧(二十六):unique、distance、accumulate搭配lambda函数表达式使用
- Ubuntu20.04下,qt交叉编译报错::15: warning: identifier ‘nullptr‘ is a keyword in C++11 [-Wc++0x-compat]
- C++ 实现十大排序算法
- 【Mac系统】Vscode使用LeetCode插件报错‘leetcode.toggleLeetCodeCn‘ not found
- 【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
- 【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
- c++IO库之文件输入输出详细整理,建议赶紧收藏!!!
- 整数拆分(c++,java)
- 从VC++6.0向VisualStudio迁移的几个常见问题