蓝桥杯第七天

一力扣53

在这里插入图片描述

1思路

  • 使用zip函数,对矩阵进行解压再包装,实现旋转
  • 迭代中去掉第一项,然后解压,再zip这样就是旋转后了,但是我们旋转(列表元素)后还是从第一项开始,所以我们还要反转
  • 直到最后没有东西就停止迭代

2代码

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

二力扣59

在这里插入图片描述

1思路

  • 设定4个数来作为边界,每次向内卷的时候更新边界范围
  • 从第二次翻转时边界就开始缩小
  • 当行数小于列数时,数字是往右或者下走的,其必然是i+或者j+,反之亦然。
  • 然后我们再迭代的时候每次迭代就-1,缩小边界,2次旋转就是ij都减一

2daim

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        grid = [[0 for _ in range(n)] for _ in range(n)]
        b = 1
        i1, j1, i2, j2 = 0, 0, n-1, n-1
        while i1 <= i2 and j1 <= j2:
            for j in range(j1, j2+1):
                grid[i1][j] = b
                b += 1
            for i in range(i1+1, i2+1):
                grid[i][j2] = b
                b += 1
            if i1 < i2:
                for j in range(j2-1, j1-1, -1):
                    grid[i2][j] = b
                    b += 1
            if j1 < j2:
                for i in range(i2-1, i1, -1):
                    grid[i][j1] = b
                    b += 1

            i1, j1 = i1 + 1, j1 + 1
            i2, j2 = i2 - 1, j2 - 1
        return grid




三力扣61

在这里插入图片描述

1思路

  • 我们根据链表的性质可知,我们不能直接根据索引直接提取,为了获取索引信息并且能够让我们循环遍历寻找,我们必须要完成长度的确定和循环链表的建立
  • 如果我们能够先遍历一遍链表,然后首位相连,那么我们就可根据长度与k确定多少次后是断点
  • 我们遍历到断点时,读取next后将next剪断成none
  • 这样旋转就完成了

代码

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        if not head or not head.next or k<1:
            return head
        res=head
        length=1
        while res.next is not None:
            length += 1
            res = res.next
        res.next = head  
        t=(length-k)%length
        l=1
        for i in range(t):
            res=res.next
        m=res.next
        res.next=None
        return m

今日总结:
第二个矩阵旋转好难啊,思路有点不清晰,半抄上去的,希望分享的时候有大佬讲细一些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值