LeetCode每日一题,面试题29.顺时针打印矩阵 LCOF
先看题目描述
题目大意就是给定一个矩阵,然后顺时针把矩阵打印出来
算法和思路
就按照从左往右,从上往下,从右往左,从下往上的顺序循环往内打印,定义一个变量 c 来记录打印到了第几层,用 count 来记录打印了多少个数字,res 来记录结果数组,用 len1 表示矩阵宽度,len2 表示矩阵高度,从左往右打印时,横坐标左边界是 c,右边界是 len1 - 1 - c;从上往下打印时,纵坐标左边界是 c,右边界是 len2 - 1 - c;横坐标从右往左打印时,从 len1 - 1 - c 打印到 c;从下往上打印时,纵坐标从 len2 - 1 -c 打印到 c,以上边界均是左开右闭。当 count 与矩阵中元素数目相等时,就表示打印完毕,返回 res 数组
注意:考虑一种特殊情况,当最后一层只剩下一个元素时,无论哪个方向的打印都不会把这个元素打印出来,故须加上一个判断,当 c = len1 - 1 -c = len2 - 1 - c时,将该元素添加到 res 数组中,再将 res 返回
算法源码
1 | class Solution { |
后来看了题解发现整体思路是差不多的,只是题解的代码中定义了四个变量表示上下左右四个边界,每循环打印一次就将边界收缩,当边界相遇时,就表示打印完毕,则跳出循环,返回结果
代码如下
1 | class Solution { |