LeetCode腾讯精选练习50——第七天

题目54:螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
题解:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        # 取首行,去除首行后,对矩阵翻转来创建矩阵
        # 再递归知道新矩阵为[],退出并将取到的数据返回
        res = []
        if matrix == []:
            return res
        res.extend(matrix[0])
        new_matrix = [reversed(i) for i in matrix[1:]]
        if new_matrix == []:
            return res
        r = self.spiralOrder([i for i in zip(*new_matrix)])
        res.extend(r)
        return res

运行结果:
在这里插入图片描述
题目59:螺旋矩阵Ⅱ
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
题解:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        array = [[0 for i in range(n)] for j in range(n)]
        c, j = 1, 0
        while c<=n*n:
            # 从左向右
            for i in range(j, n-j):
                array[j][i] = c
                c += 1
            # 从上往下走
            for i in range(j+1, n-j):
                array[i][n-j-1] = c
                c += 1
            # 从右往左走
            for i in range(n-j-2, j-1, -1):
                array[n-j-1][i] = c
                c += 1
            # 从下往上走
            for i in range(n-j-2, j, -1):
                array[i][j] = c
                c += 1
            j += 1
        return array

运行结果:
在这里插入图片描述
题目61:旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
题解:

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        if not head: return None
        orig_head, cnt = head, 1        #cnt如果会遍历到none,就从0开始计数(右开空间),如果遍历到最后有效位,就从1开始(右闭空间)
        while head.next:                # head遍历到了最后一位
            head, cnt = head.next, cnt+1   # cnt若从1开始,且紧跟着head,那么pointer最终停到哪,cnt就包括到哪。是完全相同的
        head.next = orig_head           # 首尾连接上

        step = cnt - k % cnt-1          # 计算有效移动步数
        while step > 0:
            orig_head, step = orig_head.next, step - 1
        
        new_head, orig_head.next = orig_head.next, None
        return new_head

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44315884/article/details/112792609