每日三题-组合总和、全排列、括号生成

简介: 每日三题组合总和全排列括号生成

组合总和


2c71e419f1644d85b0f4a4a8d452bbce.png

解法一

递归+回溯

class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        dfs(candidates,target,res,list,0);
        return res;
    }
    public void dfs(int [] candidates,int target,List<List<Integer>> res,List<Integer> list,int idx){
        if(target < 0 || idx >= candidates.length) return;
        if(target == 0){
            res.add(new ArrayList<>(list));
            return;
        }
        for(int i = idx;i < candidates.length;i++){
            list.add(candidates[i]);
            dfs(candidates,target-candidates[i],res,list,i);
            list.remove(list.size()-1);
        }
    }
}


全排列


2d7b508c28ee4f498ef8443c40270407.png

解法一

递归+回溯

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        int visited[] = new int[nums.length];
        dfs(res,nums,list,visited);
        return res;
    }
    public void dfs(List<List<Integer>> res,int [] nums,List<Integer> list,int [] visited){
        if(list.size() == nums.length){
            res.add(new ArrayList<>(list));
            return;
        }
        for(int i = 0;i < nums.length;i++){
            if(visited[i] == 0){
                visited[i] = 1;
                list.add(nums[i]);
                dfs(res,nums,list,visited);
                list.remove(list.size()-1);
                visited[i] = 0;
            }
        }
    }
}


括号生成


18c9723cd30a42619dd2274422d4add1.png

解法一

递归+回溯

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> res = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        dfs(res,sb,n,0,0);
        return res;
    }
    public void dfs(List<String> res,StringBuilder sb,int n,int open,int close){
        if(sb.length() == n * 2){
            res.add(sb.toString());
            return;
        }
        if(open < n){
            sb.append('(');
            dfs(res,sb,n,open+1,close);
            sb.deleteCharAt(sb.length()-1);
        }
        if(close < open){
            sb.append(')');
            dfs(res,sb,n,open,close+1);
            sb.deleteCharAt(sb.length()-1);
        }
    }
}
相关文章
|
8月前
|
算法 测试技术 C++
【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
|
8月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
8月前
|
算法
简记二分算法模板与代码案例:整数二分和浮点数二分
本文介绍了两种算法模板,分别是整数二分和浮点数二分。
65 0
|
8月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
存储 算法
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
|
8月前
|
存储 算法 Java
【算法训练-数组 二】【元素组合】两数之和、三数之和
【算法训练-数组 二】【元素组合】两数之和、三数之和
67 0
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
39 0
|
存储 算法 C++
【数据结构与算法】哈希表1:字母异位词 & 两数交集 & 快乐数 & 两数之和
【数据结构与算法】哈希表1:字母异位词 & 两数交集 & 快乐数 & 两数之和
91 0

热门文章

最新文章