如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 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
C++
class Solution {
public:
vector<int> countSteppingNumbers(int low, int high)
{
vector<int> res;
stack<long long> tmp;
for(int i=0;i<10;i++)
{
tmp.push(i);
}
while(tmp.size())
{
long long val=tmp.top();
tmp.pop();
if(val>=low && val<=high)
{
res.push_back(val);
}
if(val==0)
{
continue;
}
if(val>high)
{
continue;
}
int mod=val%10;
if(mod>0)
{
tmp.push(val*10+mod-1);
}
if(mod<9)
{
tmp.push(val*10+mod+1);
}
}
sort(res.begin(),res.end());
return res;
}
};