1215. Stepping Numbers
A Stepping Number is an integer such that all of its adjacent digits have an absolute difference of exactly 1
. For example, 321
is a Stepping Number while 421
is not.
Given two integers low
and high
, find and return a sorted list of all the Stepping Numbers in the range [low, high]
inclusive.
Example 1:
Input: low = 0, high = 21 Output: [0,1,2,3,4,5,6,7,8,9,10,12,21]
Constraints:
0 <= low <= high <= 2 * 10^9
Rust Solution
struct Solution;
impl Solution {
fn count_stepping_numbers(low: i32, high: i32) -> Vec<i32> {
let mut res = vec![];
for i in 0..10 {
Self::dfs(i, i, &mut res, low as i64, high as i64);
}
res.sort_unstable();
res
}
fn dfs(last_digit: i64, cur: i64, all: &mut Vec<i32>, low: i64, high: i64) {
if cur >= low && cur <= high {
all.push(cur as i32);
}
if cur == 0 || cur > high {
return;
}
if last_digit > 0 {
Self::dfs(last_digit - 1, cur * 10 + last_digit - 1, all, low, high);
}
if last_digit < 9 {
Self::dfs(last_digit + 1, cur * 10 + last_digit + 1, all, low, high);
}
}
}
#[test]
fn test() {
let low = 0;
let high = 21;
let res = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21];
assert_eq!(Solution::count_stepping_numbers(low, high), res);
}
Having problems with this solution? Click here to submit an issue on github.