知足常乐|leetcode C++题解系列-053 螺旋矩阵
【知足常乐|leetcode C++题解系列-053 螺旋矩阵】
题目给定一个包含 m x n 个元素的矩阵(m 行, n 列) , 请按照顺时针螺旋顺序 , 返回矩阵中的所有元素 。 示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]解题代码与测试//// Created by tannzh on 2020/7/13.///* 螺旋矩阵 *给定一个包含 m x n 个元素的矩阵(m 行, n 列) , 请按照顺时针螺旋顺序 , 返回矩阵中的所有元素 。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7] */#include 解题思路分析m * n 的矩阵按螺旋顺序转为数组:
1 2 34 5 6-->1 2 3 6 9 8 7 4 57 8 9我想到的是 , 直接用下标作为限制 。 m 行 , n 列 , 即范围:
- row: 0 ~ m
- col: 0 ~ n
可以发现的规律是 , 每一次螺旋 , 都按照以下顺序:
- 列递增 (row 降到最低)
- 行递增 (col 增到最高)
- 列递减 (row 增到最高)
- 行递减 (col 降到最低)
for (; nMin=nMin; --i)ret.push_back(matrix[mMax-1][i]);for (int i=mMax-2; i>mMin; --i)ret.push_back(matrix[i][nMin]);} 除此之外 , 需要增加一些边界条件判断:- n = matrix[0].size(); // 要提前判断 matrix.empty()
- 第三个 for 循环要避免重复 , 如仅有一行的情况 , 列递增之后 , 没有行递增 , 直接就列递减了 , 那必然重复 。 判断 mMax-1 != mMin.
- 第四个 for 循环同理 , 避免行重复 , 判断 nMax-1 != nMin.
推荐阅读
- 知足常乐|突破半导体行业发展难题,助力新基建
- 科技看点|C++题解系列-068 x 的平方根,leetcode
- 知足常乐|付巧妹:从小镇女孩到古遗传学家
- 知足常乐|国产手机集体涨价,三星、苹果销量猛涨,网友:叫你们涨价
- 知足常乐|ISC 2020创新独角兽-沙盒大赛复赛火力全开,五十强新秀亮相
- 知足常乐|青海湖试驾逸动E-life 我已忘记里程焦虑
- 知足常乐|安卓版「 AirDrop 」终于要来了!Google 透露今年 8 月开放使用
- 知足常乐|高通跌落神坛,联发科官宣好消息,国产手机们找到“备胎”
- 知足常乐|来自新配色的吸引力!Redmi K30 Pro新增卖点,清凉一下?
- 知足常乐|地球对二氧化碳比想象中更敏感
