import
java.util.ArrayList;
class
Solution {
private
ArrayList<Integer> temp =
new
ArrayList<Integer>();
public
void
solve(
int
[] a, ArrayList<ArrayList<Integer>> v,
int
idx,
int
s,
int
n)
{
if
(s == n) {
v.add(
new
ArrayList<Integer>(temp));
return
;
}
if
(idx <
0
) {
return
;
}
solve(a, v, idx-
1
, s, n);
if
(s < n) {
temp.add(a[idx]);
solve(a, v, idx, s+a[idx], n);
temp.remove(temp.size()-
1
);
}
}
public
ArrayList<ArrayList<Integer>> uniquePartitions(
int
n) {
int
[] a =
new
int
[n];
for
(
int
i =
0
; i < n; i++) {
a[i] = i+
1
;
}
ArrayList<ArrayList<Integer>> v =
new
ArrayList<ArrayList<Integer>>();
solve(a, v, n-
1
,
0
, n);
for
(
int
i =
0
; i < v.size() /
2
; i++) {
ArrayList<Integer> temp = v.get(i);
v.set(i, v.get(v.size()-i-
1
));
v.set(v.size()-i-
1
, temp);
}
return
v;
}
public
static
void
main(String[] args) {
Solution sol =
new
Solution();
ArrayList<ArrayList<Integer>> ans = sol.uniquePartitions(
4
);
System.out.println(
"for 4"
);
for
(ArrayList<Integer> arr : ans) {
System.out.println(arr);
}
ArrayList<ArrayList<Integer>> a = sol.uniquePartitions(
3
);
System.out.println(
"\nfor 3"
);
for
(ArrayList<Integer> arr : a) {
System.out.println(arr);
}
}
}