还有其划分结果的代码
时间: 2024-09-22 07:01:39 浏览: 23
c代码-简单整数划分
在Java中,为了获取正整数n的所有不同划分结果,我们可以稍微修改一下之前的代码,去除重复的划分方案。这里我们利用一个HashSet来存储已经遇到过的划分序列,这样可以避免添加重复的元素。
以下是修改后的代码:
```java
import java.util.*;
public class UniqueIntegerPartitions {
public static Set<List<Integer>> uniquePartitions(int n) {
Set<List<Integer>> result = new HashSet<>();
List<Integer> current = new ArrayList<>();
partition(n, current, result);
return result;
}
private static void partition(int num, List<Integer> current, Set<List<Integer>> result) {
if (num == 0) {
result.add(new ArrayList<>(current));
} else {
for (int i = 1; i <= num; i++) {
current.add(i);
partition(num - i, current, result);
current.remove(current.size() - 1); // 回溯
}
}
}
public static void main(String[] args) {
int n = 4;
Set<List<Integer>> partitions = uniquePartitions(n);
System.out.println("Unique partitions of " + n + ":");
for (List<Integer> part : partitions) {
System.out.println(part);
}
}
}
```
现在,当你运行这个程序,只会得到4的不同划分结果,如 `[4]`, `[3, 1]`, `[2, 2]` 和 `[2, 1, 1]`。因为每次添加到结果集中前,都会检查当前的划分序列是否已存在。
阅读全文