小姐姐上岸 Facebook,分享一题面试中遇到的题,Facebook 还是比较爱考原题的。
给定一个可能具有重复数字的列表,返回其所有可能的子集。
样例 1:
输入:[0]
输出:
[
[],
[0]
]
样例 2:
输入:[1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
public class Solution {
/**
* @param nums: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
// 排序
Arrays.sort(nums);
// dfs 搜索
Deque<Integer> subset = new ArrayDeque<>(nums.length);
dfs(nums, 0, subset, res);
return res;
}
private void dfs(int[] nums, int k, Deque<Integer> subset, List<List<Integer>> res) {
// 当前组合存入 res
res.add(new ArrayList<>(subset));
// 为 subset 新增一位元素
for (int i = k; i < nums.length; ++i) {
// 剪枝
if (i != k && nums[i] == nums[i - 1]){
continue;
}
subset.addLast(nums[i]);
// 下一层搜索
dfs(nums, i + 1, subset, res);
// 回溯
subset.removeLast();
}
}
}
Facebook 面试官帮你搞定 90%大厂高频动规题,帮你 14 天突击国内大厂面试最爱考的动态规划题型~
搜集近 3 年大厂 90%高频动规考题,你想进的,这里都有 字节跳动 /网易 /腾讯 /微软 /百度 /快手 /blibli/美团 /拼多多 /谷歌
区间型动态规划 /双序列动态规划 /划分型动态规划 /坐标型动态规划 /序列型动态规划 /背包型动态规划 /状态压缩动态规划
随时可以查看课程噢~ 戳我现在 9 元即可秒杀
折扣码:AB3DF7 (使用方法:点击原价购买,然后在选择优惠框输入折扣码,即可 9 元获得全部课程)
1
GM 2020-09-21 16:50:45 +08:00
点进来确认是不是有推广码。
然后心满意足地离开了。 |
2
hakunamatata11 OP @GM 本来就是推广节点啊
|