刷力扣热题–第十三天:234.回文链表+54.螺旋矩阵
菜鸟第十三天开始奋战敲代码,持之以恒,见证成长
1.题目简介
(1)回文链表
(2)螺旋矩阵
2.题目解答
(1)回文链表
主要的思路:先得到整体长度,存储前一半的元素,之后遍历后一半与存储的列表进行对比之后,进行结果返回.时间复杂度:O(N),空间复杂度:O(N)
题目比较简单,所以好做,也好想.比较好过.
(2)螺旋矩阵
这道题目想的时候主要依靠在模型进行过程中的分类情况,主要分为下转弯,左转弯,上转弯和右转弯.靠四个变量去控制每次走的长度和上下界限,走的比较多的弯路来自与整个过程的截止点.
调了好久终于算是过了,问题分析起来比较简单,在走完第一条路径的时候,要更新上边界,转弯走完第二条边界的时候,更新右边界,走完第三条路径的时候,更新下边界,最后一条路径走完更新左边界,以此类推,并设置当两两最小边界大于最大边界之后,模型停止.
3.心得体会
简单题的难度还是相对比较简单,但中等题会觉着有较多的坑在,比较考察逻辑思维能力,多积累,多做,看看能不能把逻辑思维能力提上去.
(1)回文链表
class Solution(object):
def isPalindrome(self, head):
"""
:type head: ListNode
:rtype: bool
"""
temp_head = head
length = 0
while temp_head:
length += 1
temp_head = temp_head.next
temp_head = head
temp = []
i = 0
while i < length/2:
temp.append(temp_head.val)
temp_head = temp_head.next
i += 1
if length%2: temp_head = temp_head.next
while temp_head:
if temp_head.val != temp[i-1]:
return False
temp_head = temp_head.next
i -= 1
return True
(2)螺旋矩阵
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
length_x = len(matrix)
length_y = len(matrix[0])
temp = []
max_x = length_x -1
max_y = length_y -1
min_x = 0
min_y = 0
while len(temp) < length_x * length_y:
for j in range(min_y,max_y+1):
temp.append(matrix[min_x][j])
min_x += 1
for i in range(min_x,max_x+1):
temp.append(matrix[i][max_y])
max_y -= 1
if min_x > max_x or min_y > max_y: break
for j in range(max_y,min_y-1,-1):
temp.append(matrix[max_x][j])
max_x -= 1
for i in range(max_x,min_x-1,-1):
temp.append(matrix[i][min_y])
min_y += 1
return temp
4.做题时长
7月17日15:30-16:41 15:50-17:21