Problem
You are given an array nums
of positive integers and a positive integer k
.
A subset of nums
is beautiful if it does not contain two integers with an absolute difference equal to k
.
Return **the number of **non-empty beautiful subsets of the array nums
.
A subset of nums
is an array that can be obtained by deleting some (possibly none) elements from nums
. Two subsets are different if and only if the chosen indices to delete are different.
Example 1:
Input: nums = [2,4,6], k = 2
Output: 4
Explanation: The beautiful subsets of the array nums are: [2], [4], [6], [2, 6].
It can be proved that there are only 4 beautiful subsets in the array [2,4,6].
Example 2:
Input: nums = [1], k = 1
Output: 1
Explanation: The beautiful subset of the array nums is [1].
It can be proved that there is only 1 beautiful subset in the array [1].
Constraints:
1 <= nums.length <= 20
1 <= nums[i], k <= 1000
Solution (Java)
class Solution {
public int beautifulSubsets(int[] nums, int k) {
Arrays.sort(nums);
List<List<Integer>> res=new ArrayList<>();
f(0,nums,res,new ArrayList<>(),k);
return res.size();
}
public void f(int ind,int[] nums,List<List<Integer>> res,List<Integer> ds,int k){
if(ind==nums.length){
if(ds.size()>0){
res.add(new ArrayList<>(ds));
}
return;
}
if(!(ds.contains(nums[ind]-k) )){
ds.add(nums[ind]);
f(ind+1,nums,res,ds,k);
ds.remove(ds.size()-1);
}
f(ind+1,nums,res,ds,k);
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).