返回所有长度为 N
且满足其每两个连续位上的数字之间的差的绝对值为 K
的非负整数。
请注意,除了数字 0
本身之外,答案中的每个数字都不能有前导零。例如,01
因为有一个前导零,所以是无效的;但 0
是有效的。
你可以按任何顺序返回答案。
示例 1:
输入:N = 3, K = 7 输出:[181,292,707,818,929] 解释:注意,070 不是一个有效的数字,因为它有前导零。
示例 2:
输入:N = 2, K = 1 输出:[10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98]
提示:
1 <= N <= 9
0 <= K <= 9
C++
class Solution {
public:
void dfs(vector<vector<int>>& tmp, vector<int>& vec, int n, int k, int num) {
if(vec.size()==n) {
tmp.push_back(vec);
return;
}
int num_=num+k;
if(num_>=0 && num_<=9) {
vec.push_back(num_);
dfs(tmp,vec,n,k,num_);
vec.pop_back();
}
num_=num-k;
if(num_>=0 && num_<=9 && k!=0) {
vec.push_back(num_);
dfs(tmp,vec,n,k,num_);
vec.pop_back();
}
}
vector<int> numsSameConsecDiff(int n, int k) {
vector<int> res;
if(0==n) {
for(int i=0;i<10;i++) {
res.push_back(i);
}
return res;
}
vector<vector<int>> tmp;
for(int i=1;i<=9;i++) {
vector<int> vec={i};
dfs(tmp,vec,n,k,i);
if(vec.size()==n) {
tmp.push_back(vec);
}
}
for(auto it:tmp) {
int num=0;
for(auto ii:it) {
num=num*10+ii;
}
res.push_back(num);
}
return res;
}
};