java - 如何从 for 循环关系中建立循环关系
问题描述
那是我的第一篇文章,而且我对 Java 还是很陌生,并且正在尝试制作一个小程序,该程序将给出所有具有从 0 到给定数字的数字的唯一数字。因此,例如对于 input: 4 输出将是:
1234
1243
1324
1342
1423
....
依此类推,4 也意味着输出将在 1000 < x < 10000 的范围内,其中 x 是输出。
我试图制作如此循环的关系方法,但找不到任何有用的东西。因此,我创建了一个 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
订单无关紧要,但它会运行。如果我错误地认为重复可以解决问题,请帮我找出什么可以解决。谢谢
解决方案
正如 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);
}
}
来源:堆排列
推荐阅读
- javascript - React Hooks 的嵌套数据结构问题
- jquery - .toggle() 不适用于附加元素
- python-3.x - 从列中提取数字并将它们作为数据框 pandas 中的 int 范围放在一个空列中
- eclipse - 在 Eclipse 中导入 LibGDX 项目:无法解析:项目:core
- python - 在 Python 中的时间范围之间从日志文件中导出数据
- apache-spark - 如何将火花镶木地板插入 HIVE 表?
- android - 根据实时保存在 Firebase 中的数据进行搜索
- go - 如何用 Go 语言解压缩字符串
- java - 为什么有很多以 0 结尾的非公共低级 Java 方法?
- android - 在 Android Studio 中重命名包名称后出错