leetcode 学习打卡

054-螺旋矩阵

题目描述
  • 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
代码(python)
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:

        u, d, l, f = 0, len(matrix) - 1, 0, len(matrix[0]) - 1
        res = []
        while u <= d and l <= f:
            for i in range(l, f + 1):
                res.append(matrix[u][i])
            u += 1
            if u > d: break
            for i in range(u, d + 1):
                res.append(matrix[i][f])
            f -= 1
            if l > f: break
            for i in range(f, l - 1, -1):
                res.append(matrix[d][i])
            d -= 1
            if u > d: break
            for i in range(d, u - 1, -1):
                res.append(matrix[i][l])
            l += 1
            if l > f: break
        return res

059-螺旋矩阵II

题目描述
  • 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
代码(python)
class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        u, d, l, f = 0, n -1, 0, n -1
        res = [[0 for _ in range(n)] for _ in range(n)]
        temp = 1
        # while temp <= n ** 2:
        while u <= d and l <= f:
            for i in range(l, f + 1):
                res[u][i] = temp
                temp += 1
            u += 1
            if u > d: break
            for i in range(u, d + 1):
                res[i][f] = temp
                temp += 1
            f -= 1
            if l > f: break
            for i in range(f, l - 1, -1):
                res[d][i]  = temp
                temp += 1
            d -= 1
            if u > d: break
            for i in range(d, u - 1, -1):
                res[i][l] = temp
                temp += 1
            l += 1
            if l > f: break
        return res

061-旋转链表

题目描述
  • 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
代码(python)
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:

        if not head or not head.next or not k: return head
        tmp, count= head, 0
        while tmp:
            tmp = tmp.next
            count += 1
        k = k % count
        if k == 0:
            return head
        fast = slow = head
        for i in range(k):
            fast = fast.next
        while fast.next:
            fast = fast.next
            slow = slow.next
        newHead = slow.next
        slow.next = None
        fast.next = head
        return newHead
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值