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