代码随想录算法训练营第三十一天 | 合并区间、单调递增的数字
合并区间:
这里还是先对左区间进行排序,判断重叠区间,首先判断是否存在元素,存在那么就将元素的第一个放到结果中,那么判断重叠就是当前元素的左区间和结果集里的最后元素的右区间进行判断,如果重叠,更新右区间为两个右区间的最大值,详细代码如下所示:
class Solution(object):def merge(self, intervals):""":type intervals: List[List[int]]:rtype: List[List[int]]"""intervals.sort(key=lambda x: x[0])if not intervals:return []result = [intervals[0]]for i in range(len(intervals)):if intervals[i][0]<=result[-1][1]:result[-1][1] = max(intervals[i][1],result[-1][1])else:result.append(intervals[i])return result
单调递增的数字:
这里从本质上讲就是从后往前的数字进行遍历替换,一旦右一个数字为9,那么这个数字及之后的数字都应该为9,这个是需要注意的地方,详细代码如下所示:
class Solution(object):def monotoneIncreasingDigits(self, n):""":type n: int:rtype: int"""strnum=list(str(n))for i in range(len(strnum)-1,0,-1):if strnum[i-1]>strnum[i]:strnum[i-1]=str(int(strnum[i-1])-1)strnum[i:]="9"*len(strnum[i:])return int(''.join(strnum))