我该如何安排。数字......这样每个由排列形成的新数字与前一个最大值的差异最大为 1。
例如,如果输入为 k=1,则输出将为 1
如果 k =2 输出是:11, 12 2,1 是错误的,因为最左边的必须始终为 1。
如果 k = 3 输出为:111,112, 121, 122, 123
如果 k = 4:1111,1112,1121,1122,1123,1212,1211,1213,1223,1221,1222,1233,1234
1423 是错误的 diff b/w 1 和 4 是 3。 1243 是错误的 diff b/w 2 和 4 是 2....
如果可能的话,我如何使用 DP 来做到这一点?
这是上述问题的解决方案之一......任何人都可以帮助我理解这段代码......提前致谢......
public class MaxOneDiff {
public static void main(String[] args) {
int k = 4;
getList(k);
}
public static void getList(int k) {
int arr[] = new int[k];
int index = 0;
printRecList(k, arr, index, k);
}
public static void printRecList(int k, int arr[], int index, int range) {
if (k == 0) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
} else {
for (int i = 1; i <= range; i++) {
if (index == 0) {
arr[index] = i;
printRecList(k - 1, arr, index + 1, range);
} else {
int t = arr[index-1]-i;
t = t > 0 ? t : -t;
if (t < 2) {
arr[index] = i;
printRecList(k - 1, arr, index + 1, range);
}
}
}
}
}
}