这是我的第一篇文章,也是我对Java的新手,正试图制作一个小程序,该程序将给出从0到给定数字的所有唯一数字。例如对于输入:4,输出将是:
1234
1243
1324
1342
1423
....
依此类推,4也意味着输出将在一定范围内
1000 我已经尝试过建立这样的递归关系方法,但是找不到任何有用的方法。因此,我改为创建了一个for循环关系,该循环将给出我想要的结果,但仅适用于4的输入。我还有一个检查数字是否唯一的方法。 因此,就目前而言,我需要控制每种情况下所需的循环数,而我需要的是由输入设置的深度。就像我之前说的,输出形式如下: 该命令无关紧要,它仍然可以运行。如果我错误地认为复发可以解决问题,请帮助我找到解决方案。
谢谢boolean check(int[] array) {...}
如果数字唯一,则返回true
public static void thing(int num) {
int[] arr = new int[num];
for(int a = 1; a <= 4; a++) {
arr[0] = a;
for(int b = 0; b <= 4; b++) {
arr[1] = b;
for(int c = 0; c <= 4; c++) {
arr[2] = c;
for(int d = 0; d <= 4; d++) {
arr[3] = d;
if(check(arr)) {
System.out.println(arr[0] + "" + arr[1] + "" + arr[2] + "" + arr[3]);
//here in the result it would print the array like in fibonacci I guess
}
}
}
}
}
}
1234
1243
....
....
4312
4321
答案 0 :(得分:1)
如WJS所述,您正在寻找置换算法。有很多不同的方法,但这是一种简单的方法:
class HeapAlgo {
//Prints the array
private void printArr(int a[], int n) {
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
System.out.println();
}
//Generating permutation using Heap Algorithm
private void heapPermutation(int a[], int size, int n) {
// if size becomes 1 then prints the obtained
// permutation
if (size == 1)
printArr(a, n);
for (int i = 0; i < size; i++) {
heapPermutation(a, size - 1, n);
// if size is odd, swap first and last
// element
if (size % 2 == 1) {
int temp = a[0];
a[0] = a[size - 1];
a[size - 1] = temp;
}
// If size is even, swap ith and last
// element
else {
int temp = a[i];
a[i] = a[size - 1];
a[size - 1] = temp;
}
}
}
// Driver code
public static void main(String[] args) {
HeapAlgo obj = new HeapAlgo();
int[] a = {1, 2, 3};
obj.heapPermutation(a, a.length, a.length);
}
}