代码随想录算法训练营第34天 | 贪心算法 5:56.合并区间、738.单调递增的数字

56.合并区间
https://leetcode.cn/problems/merge-intervals/description/
代码随想录
https://programmercarl.com/0056.合并区间.html
738.单调递增的数字
https://leetcode.cn/problems/monotone-increasing-digits/description/
代码随想录
https://programmercarl.com/0738.单调递增的数字.html

56.合并区间

题解思路

  • 和res最后一个比较是否重合;
  • 如果不重合,就增加一个;
  • 如果重合,将前面的范围扩散到最大;

题解代码

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        if len(intervals)==0:
            return []
        intervals.sort(key = lambda x:x[0])
        res = [intervals[0]]
        for i in range(1,len(intervals)):
            if intervals[i][0]>res[-1][1]:##不重合
                res.append(intervals[i])
            else:
                res[-1][1] = max(intervals[i][1],res[-1][1])
        return res

738.单调递增的数字

题解思路

  • 从后向前找不符合要求的数字
  • 找到后标记 将前一个向下减一 后面全部变为9

题解代码

class Solution:
    def monotoneIncreasingDigits(self, n: int) -> int:
        if n<10:
            return n

        strnum = str(n)
        flag = len(strnum) ###设定flag是完全不需要改变的

        for i in range(len(strnum)-1,0,-1):##从后往前遍历
            if int(strnum[i])<int(strnum[i-1]):
                flag = i
                strnum = strnum[:i-1]+str(int(strnum[i-1])-1)+strnum[i:]
        strnum_i = strnum[:flag]+"9" * (len(strnum)-flag)
        return int(strnum_i)
posted @ 2024-07-21 15:56  哆啦**  阅读(1)  评论(0编辑  收藏  举报