0
点赞
收藏
分享

微信扫一扫

【LeetCode每日一题】剑指 Offer 29. 顺时针打印矩阵(持续更新)


不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

2021/6/5

今日题目(剑指Offer系列)

​​剑指 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]

解题思路:

>该题的意思就是将数组螺旋打印
>Java解法就是设立四个边界,然后根据四个边界定四个循环
>直到边界相等,说明所有元素已全部打印完成

>Python解法就会很简单
>Python有切片功能,可以很容易切出第一行的元素
>所以想法就是切出第一行的元素,然后将矩阵逆转90度
>不断循环该过程
>将矩阵逆转90度可以使用list(zip(*matrix))[::-1]

Python解法:

class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res=[]
while matrix:
res+=matrix.pop(0)
matrix=list(zip(*matrix))[::-1]
return res

Java解法:

if (matrix.length == 0) {
return new int[] {};
}

int left = 0;
int right = matrix[0].length;
int up = 0;
int down = matrix.length;

int[] res = new int[matrix[0].length * matrix.length];
int k = 0;

while (true) {
for (int i = left; i < right; i++) {
res[k++] = matrix[up][i];
}
if (++up >= down)
break;
for (int i = up; i < down; i++) {
res[k++] = matrix[i][right - 1];
}
if (--right <= left)
break;
for (int i = right - 1; i >= left; i--) {
res[k++] = matrix[down - 1][i];
}
if (--down <= up)
break;
for (int i = down - 1; i >= up; i--) {
res[k++] = matrix[i][left];
}
if (++left >= right)
break;
}

return res;


举报

相关推荐

0 条评论