Subsets; BackTracking; DFS; Bit Manipulation; DP;

Based on the combinations problem, we use a for loop to call the method created in that problem and this problem will be solved. Later we‘ll add bit manipulation.

Code:

public class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> resultList = new ArrayList<>();
        int len = nums.length;

        for(int i = 0; i < len; i++){
            List<Integer> list = new ArrayList<>();
            addSubset(nums, len-1, 0, i+1, resultList, list);
        }
        List<Integer> list = new ArrayList<>();
        resultList.add(list);
        return resultList;
    }

    public void addSubset(int[] nums, int n, int cur, int k, List<List<Integer>> result, List<Integer> list){
        if(k == 0){
            result.add(new ArrayList<>(list));
            return;
        }

        list.add(nums[cur]);
        addSubset(nums, n, cur+1, k-1, result, list);
        list.remove(list.size()-1);
        if(cur == n-k+1) return;
        addSubset(nums, n, cur+1, k, result, list);
    }
}
时间: 2024-10-13 10:50:30

Subsets; BackTracking; DFS; Bit Manipulation; DP;的相关文章

poj3107(dfs,树形dp)

和poj1655的方法完全一样,但是这道题的n的范围大了,用vector存图会TLE,所以改用前向星来存图就可以了. 这里解释一下前向星存图的方法: 其实就是用静态链表来实现邻接链表,这样可以避免使用指针. head[i]数组来记录每个节点的第一条边:每条边用结构体e[i]来存,e[i].v表示这条边指向的点,e[i].next表示这条边连向的下一条边. 它的巧妙之处在于每次插入到链表的首部而不是尾部,这样就避免了对链表的遍历.同一起点的各条边在邻接表中的顺序和读入顺序正好相反. 贴个模板: s

LeetCode Subsets (DFS)

题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 return a

HDU 1520 Anniversary party(DFS或树形DP)

Problem Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E.

【Luogu】P1122最大子树和(DFS,树上DP)

题目链接 感觉自己DP好烂啊   道道看题解 钦定1为根,DFS搜索子树权值.如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉.最后在所有节点的权值中寻找最优解. void dfs(int x,int fa){ if(f[x]>0) return; f[x]+=que[x]; for(int i=head[x];i;i=edge[i].next){ int to=edge[i].to; if(to==fa) continue; dfs(to,x); if(f[to]>0) f[x]

【BZOJ-1912】patrol巡逻 树的直径 + DFS(树形DP)

1912: [Apio2010]patrol 巡逻 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1034  Solved: 562[Submit][Status][Discuss] Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n). Output 输出一个整数,表示新建了K 条道路后能达到的最小巡逻距离.

Leetcode 78. Subsets (backtracking) 90 subset

using prev class Solution { List<List<Integer>> res = new ArrayList<List<Integer>>(); public List<List<Integer>> subsets(int[] nums) { List<Integer> temp = new ArrayList<>(); back(temp,nums, 0); return res;

LeetCode Subsets II (DFS)

题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 ans.push_back(vector

pku1088 dfs+dp记忆化搜索

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 88861   Accepted: 33344 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17

POJ 3249 Test for Job (dfs + dp)

题目链接:http://poj.org/problem?id=3249 题意: 给你一个DAG图,问你入度为0的点到出度为0的点的最长路是多少 思路: 记忆化搜索,注意v[i]可以是负的,所以初始值要-inf. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 1e5 + 5; 6 typedef long long