题:https://leetcode.com/contest/weekly-contest-117/problems/numbers-with-same-consecutive-differences/
题目大意
给定位数N,若每个数的相邻位之间的差值为K,则符合要求。
求出所有符合要求的数。
解题思路
类似bdfs 思想,但不用记录,因为 int型 本身可以 栈保存
dfs,第一个数比较特别,在递归前初始化。
class Solution {
void dfs(int n,int N,int cur ,int k ,List<Integer> resList){
if(n == N){
resList.add(cur);
return;
}
if(n>0 && cur == 0){
return;
}
int p1 = cur % 10 + k;
int p2 = cur % 10 - k;
if(p1!=p2){
if (p1 >= 0 && p1 <= 9) {
dfs(n + 1, N, cur * 10 + p1, k, resList);
}
}
if (p2 >= 0 && p2 <= 9) {
dfs(n + 1, N, cur * 10 + p2, k, resList);
}
}
public int[] numsSameConsecDiff(int N, int K) {
List<Integer> resList = new ArrayList<>();
for(int i = 0 ; i<= 9 ;i++)
dfs(1,N,i,K,resList);
int [] resArr = new int[resList.size()];
int i = 0 ;
for(int val:resList)
resArr[i++] = val;
return resArr;
}
}