如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1
,那么这个数就是一个「步进数」。
例如,321
是一个步进数,而 421
不是。
给你两个整数,low
和 high
,请你找出在 [low, high]
范围内的所有步进数,并返回 排序后 的结果。
示例:
输入:low = 0, high = 21
输出:[0,1,2,3,4,5,6,7,8,9,10,12,21]
提示:
0 <= low <= high <= 2 * 10^9
解题思路
首先不难先出暴力解法,也就是遍历[low,high]
这个区间中的每个数,然后判断其是不是步进数即可。
class Solution:
def countSteppingNumbers(self, l: int, r: int) -> List[int]:
def check(x):
pre, cur = x%10, 0
x //= 10
while x:
cur = x%10
if abs(pre - cur) != 1:
return False
x //= 10
pre = cur
return True
return [i for i in range(l, r + 1) if check(i)]
但是这么做的话会超时。我们首先分析一下这个问题,对于给定的数 U U U,如果它最后一位是 l t l_t l