剑指 Offer 29. 顺时针打印矩阵
难度简单
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
很简单,但还是有要注意的点:
这个矩阵的行数和列数未必相等!从第二个样例可以看出来。
需要元素总数来判断是否吧所有元素添加到结果中。
遍历矩阵需要用到行数和列数,要区分好m和n。
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int cnt = 0, level = 0; if(matrix.size() == 0) return {}; int n = matrix.size(), m = matrix[0].size(); int count = n*m; vector<int> ans(count); while(cnt < count){ for(int j=0+level; j<m-level && cnt<count; j++){ ans[cnt++] = matrix[0+level][j]; } for(int i=1+level; i<n-level && cnt<count; i++){ ans[cnt++] = matrix[i][m-1-level]; } for(int j=m-2-level; j>=0+level && cnt<count; j--){ ans[cnt++] = matrix[n-1-level][j]; } for(int i=n-2-level; i>=1+level && cnt<count; i--){ ans[cnt++] = matrix[i][0+level]; } level++; } return ans; } };
我的算法上升空间还很大,今天面试变形二分没撕出来。继续努力吧,项目业务关还是很有信心的,可惜了算法题了。
好在offer在手,接下来也不慌。