Return all non-negative integers of length N
such that the absolute difference between every two consecutive digits is K
.
Note that every number in the answer must not have leading zeros except for the number 0
itself. For example, 01
has one leading zero and is invalid, but 0
is valid.
You may return the answer in any order.
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]
Note:
1 <= N <= 9
0 <= K <= 9
题目理解:
给定N和K,找出所有长度为N,且两个相邻数字差的绝对值是K的所有整数,除了0之外的数字不能以0开头
解题思路:
使用N次迭代得到解,每一次找到长度为i,且符合要求的整数。每一次迭代时,遍历所有长度为i - 1的数,根据其最后一位数字,找到可能的能接在这个数后面的整数,然后更新整数加入集合
代码如下:
class Solution {
public int[] numsSameConsecDiff(int N, int K) {
int len = 0;
List<Integer> cur = new ArrayList<>(), next;
while(len++ < N){
next = new ArrayList<>();
if(len == 1){
for(int i = 0; i < 10; i++)
next.add(i);
}
else{
for(int num : cur) {
if(num == 0)
continue;
int last = num % 10;
if (last + K < 10)
next.add(num * 10 + (last + K));
if (K != 0 && last - K > -1)
next.add(num * 10 + (last - K));
}
}
cur = next;
}
int[] res = new int[cur.size()];
for(int i = 0; i < cur.size(); i++)
res[i] = cur.get(i);
return res;
}
}