返回所有长度为 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 <= 90 <= K <= 9C++
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; } };
