967. Numbers With Same Consecutive Differences
Description
Given two integers n and k, return an array of all the integers of length n
where the difference between every two consecutive digits is k
. You may return the answer in any order.
Note that the integers should not have leading zeros. Integers as 02
and 043
are not allowed.
Example 1:
Input: n = 3, k = 7 Output: [181,292,707,818,929] Explanation: Note that 070 is not a valid number, because it has leading zeroes.
Example 2:
Input: n = 2, k = 1 Output: [10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98]
Constraints:
2 <= n <= 9
0 <= k <= 9
Solution
numbers-with-same-consecutive-differences.py
class Solution:
def numsSameConsecDiff(self, n: int, k: int) -> List[int]:
res = []
def go(index, curr):
if index == n:
res.append(curr)
return
last = curr % 10
for nxt in {last + k, last - k}:
if 0 <= nxt < 10:
go(index + 1, curr * 10 + nxt)
for x in range(1, 10):
go(1, x)
return res
numbers-with-same-consecutive-differences.cpp
class Solution {
public:
vector<int> numsSameConsecDiff(int N, int K) {
vector<int> cur = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
for (int i = 2; i <= N; ++i) {
vector<int> cur2;
for (int x : cur) {
int y = x % 10;
if (x > 0 && y + K < 10)
cur2.push_back(x * 10 + y + K);
if (x > 0 && K > 0 && y - K >= 0)
cur2.push_back(x * 10 + y - K);
}
cur = cur2;
}
return cur;
}
};