56. 合并區間 - 力扣(LeetCode)?
寫法一:維護right和left兩個數作為當前區間的左右邊界
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key = lambda x: x[0])left = intervals[0][0]right = intervals[0][1]res = []for i in range(1, len(intervals)):if intervals[i][0] > right:res.append([left, right])left = intervals[i][0]right = intervals[i][1]else:right = max(right, intervals[i][1])res.append([left, right])return res
寫法二:修改res末尾區間的右邊界直到它不與當前區間重合,將這個不重合的新區間推入res。
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key = lambda x: x[0])res = []res.append(intervals[0])for i in range(1, len(intervals)):if res[-1][1] < intervals[i][0]:res.append(intervals[i])else:res[-1][1] = max(res[-1][1], intervals[i][1])return res
?
?738. 單調遞增的數字 - 力扣(LeetCode)
關鍵在于從后往前遍歷,一旦遇到反單調遞增的數就用flag記下其位置,同時前一個數減去1。退出循環后,從flag開始(包括flag)都改為9,flag以前的數按digit數組。
class Solution:def monotoneIncreasingDigits(self, n: int) -> int:if 0 <= n <= 9:return n digit = []tmp = nwhile tmp > 0:digit.insert(0, tmp % 10)tmp //= 10flag = len(digit)for i in range(len(digit)-1, 0, -1):if digit[i-1] > digit[i]:flag = idigit[i-1] -= 1res = 0for i in range(flag):res = res * 10 + digit[i]for i in range(flag, len(digit)):res = res * 10 + 9return res