力扣(2024.06.21)

1. 54——螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照顺时针螺旋顺序 ,返回矩阵中的所有元素。

标签:数组,矩阵,模拟

代码:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        top = 0
        bottom = len(matrix) - 1
        left = 0
        right = len(matrix[0]) - 1
        res = []
        while True:
            for i in range(left, right + 1):
                res.append(matrix[top][i])
            top = top + 1
            if top > bottom:
                break
            for i in range(top, bottom + 1):
                res.append(matrix[i][right])
            right = right - 1
            if right < left:
                break
            for i in range(right, left - 1, -1):
                res.append(matrix[bottom][i])
            bottom = bottom - 1
            if bottom < top:
                break
            for i in range(bottom, top - 1, -1):
                res.append(matrix[i][left])
            left = left + 1
            if left > right:
                break
        return res

2. 55——跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

标签:数组,贪心,动态规划

代码:

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        i = 0
        while i <= cover:
            leng = i + nums[i]
            cover = leng if leng > cover else cover
            if cover >= len(nums) - 1:
                return True
            i = i + 1
        return False

3. 56——合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

标签:数组,排序

代码:

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort()
        res = []
        res.append(intervals[0])
        for i in intervals:
            interval = res[-1]
            if i[0] <= interval[1]:
                start = interval[0]
                end = max(interval[1], i[1])
                res.pop()
                res.append([start, end])
            else:
                res.append(i)
        return res

4. 57——插入区间

给你一个无重叠的按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals

注意你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

标签:数组(目前不会)

代码:

5. 58——最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。

标签:字符串

代码:

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        while s[0] == ' ':
            s = s[1:]
        while s[-1] == ' ':
            s = s[0:-1]
        left = len(s) - 1
        right = len(s) - 1
        while left >= 0 and s[left] != ' ':
            left = left - 1
        return right - left + 1 if left == 0 else right - left

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值