这个题解的基本思路是穷举所有可能的顺次数,并检查它们是否落在给定的区间 [low, high] 内。顺次数是由连续递增的数字组成,如 123 或 456。题解首先考虑顺次数可能的长度,从1到9,然后为每个长度生成所有可能的顺次数。这是通过固定顺次数的起始数字,然后逐位构建整数完成的。生成的顺次数如果大于 high,就中断当前长度的进一步探索,避免无效的计算。若顺次数同时大于或等于 low 且小于或等于 high,则将其添加到结果列表中。
时间复杂度: O(1),因为生成顺次数的总数是有限的。
空间复杂度: O(1),因为输出列表的大小由有限的顺次数决定。
from typing import List
class Solution:
def sequentialDigits(self, low: int, high: int) -> List[int]:
result = [] # 存储结果的列表
for length in range(1, 10): # 顺次数的长度从1到9
for start in range(1, 10 - length + 1): # 确定起始数字,最大为9减去长度加1
num = 0 # 用于构建顺次数的变量,初始化为0
valid = True # 标记当前构建的顺次数是否有效(在范围内)
for i in range(length): # 遍历每一位数字
digit = start + i # 计算当前位的数字
num = num * 10 + digit # 将当前数字加到顺次数的最低位
if num > high: # 如果当前数字已经大于high,提前终止内层循环并标记为无效
valid = False
break
if num >= low and valid and i == length - 1: # 如果当前数字在范围内且之前也都在范围内,且构建完整个顺次数后才添加到结果列表中,避免重复添加
result.append(num)
return result # 返回结果列表