java提供五个数字1,5,7,8,9。要求输出全部的排列组合结果,且不重复。(如:17859)
时间: 2024-10-14 22:09:32 浏览: 33
在Java中,生成并打印给定数字的所有全排列可以利用递归的方式来实现,这里我们可以使用回溯法。以下是一个简单的示例代码:
```java
import java.util.ArrayList;
import java.util.Arrays;
public class NumberPermutations {
public static void main(String[] args) {
int[] numbers = {1, 5, 7, 8, 9};
ArrayList<String> permutations = new ArrayList<>();
permute(numbers, "", permutations);
for (String permutation : permutations) {
System.out.println(permutation);
}
}
private static void permute(int[] nums, String prefix, ArrayList<String> result) {
if (nums.length == 0) {
result.add(prefix);
} else {
for (int i = 0; i < nums.length; i++) {
swap(nums, i, nums.length - 1); // 将最后一个元素移到前面
permute(Arrays.copyOfRange(nums, 0, nums.length - 1), prefix + nums[nums.length - 1], result);
swap(nums, i, nums.length - 1); // 恢复原顺序,继续处理下一个元素
}
}
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
```
这个程序首先定义了一个空的结果列表`permutations`,然后通过递归函数`permute`生成所有可能的排列。在每次递归过程中,它会将数组的一个元素放到当前序列的前面,并对剩余的元素继续调用自身。当处理完所有的元素时,就形成一个新的排列并添加到结果列表中。
注意:由于数字数量较少,这里手动列举了所有可能的组合。如果数字较多,这种方法效率较低,因为它会生成大量的重复组合。对于大规模数据,更合适的是使用动态规划或其他优化策略。
阅读全文