首页 > 其他分享 >day26

day26

时间:2023-02-14 00:12:33浏览次数:40  
标签:target int res day26 candidates path new

1、leetcode39 组合总和

class Solution {
    List<Integer> path = new LinkedList<Integer>();
    List<List<Integer>> res = new ArrayList<>();
    int sum;

    public void backTracking(int[] candidates, int target, int startIndex) {
        if(sum == target){
            res.add(new ArrayList<>(path));
            return;
        }
		
        // 如果 sum + candidates[i] > target 就终止遍历
        for(int i=startIndex; i<candidates.length && sum + candidates[i] <= target; i++){
            sum += candidates[i];
            path.add(candidates[i]);
            backTracking(candidates, target, i);
            sum -= candidates[i];
            path.remove(path.size()-1);
        }
    }

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);// 需要先排序【通过先排序进行剪枝优化】
        backTracking(candidates, target, 0);
        return res;
    }
}

2、leetcode40 组合总和Ⅱ

class Solution {
    List<Integer> path = new LinkedList<Integer>();
    List<List<Integer>> res = new ArrayList<>();
    int sum;

    public void backTracking(int[] candidates, int target, int startIndex) {
        if(sum == target){
            res.add(new ArrayList<>(path));
            return;
        }

        for(int i=startIndex; i<candidates.length && sum+candidates[i]<=target; i++){
            // 要对同一树层使用过的元素进行跳过
            if(i>startIndex  && candidates[i]==candidates[i-1]){
                continue;
            }
            sum += candidates[i];
            path.add(candidates[i]);
            backTracking(candidates, target, i+1);// 和39.组合总和的区别1,这里是i+1,每个数字在每个组合中只能使用一次
            sum -= candidates[i];
            path.remove(path.size()-1);
        }
    }

    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        Arrays.sort(candidates);// 首先把给candidates排序,让其相同的元素都挨在一起。
        backTracking(candidates, target, 0);
        return res;
    }
}

3、leetcode131 分割回文串

class Solution {
    List<String> path = new LinkedList<String>();
    List<List<String>> res = new ArrayList<>();

    public boolean isPalindrome(String s, int start, int end) {
        for(int i=start, j=end; i<j; i++,j--) {
            if(s.charAt(i)!=s.charAt(j)) {
                return false;
            }
        }
        return true;
    }

    public void backTracking(String s, int startIndex) {
        // 如果起始位置已经大于s的大小,说明已经找到了一组分割方案
        if(startIndex>=s.length()){
            res.add(new ArrayList<>(path));
            return;
        }

        for(int i=startIndex; i<s.length(); i++){
            if(isPalindrome(s,startIndex,i)){ // 是回文子串
                // 获取[startIndex,i]在s中的子串
                String str = s.substring(startIndex, i+1);
                path.add(str);
            }else {// 不是回文,跳过
                continue;
            }
            backTracking(s,i+1);// 寻找i+1为起始位置的子串
            path.remove(path.size()-1);// 回溯

        }
    }

    public List<List<String>> partition(String s) {
        backTracking(s, 0);
        return res;
    }
}

标签:target,int,res,day26,candidates,path,new
From: https://www.cnblogs.com/hzj-bolg/p/17118363.html

相关文章

  • 剑指offer——Day26 字符串(中等)
    Day262023.2.8字符串(中等)剑指Offer20.表示数值的字符串自己实现这个题自己实现就是要逐字符去判断是不是数字,这个就是暴力解法了,看看题解有没有更直接简便的解法题......
  • day26-XML/枚举/注解
    1.xml1.1概述【理解】万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者:TimBerners-Lee(蒂姆·......
  • Day26.1.冒泡排序
    Day26.1.冒泡排序1.内容两层循环,外层冒泡轮数,内层依次比较,时间复杂度O(n2),{实际为(n-1)*n/2},(具体参考数据结构)相邻的数比较一轮确定一个数的位置最后一个数......
  • Day26:内部类的详解
    内部类1.1内部类概述内部类:就是在一个类中定义另外一个类。例如我们在A类中定义一个B类,那么B类就是A类的内部类,A则是B的外部类。好比我们的手机是一个类,而手机内部的零......
  • day26-过滤器Filter
    Filter过滤器1.Filter过滤器说明为什么需要过滤器?先来看一个例子:我们在登录网站页面时,需要先进行登录验证。用户访问的正常的流程应该是:用户先通过登录页面进......
  • LeetCode刷题记录.Day26
    删除字符串中所有相邻重复项1047.删除字符串中的所有相邻重复项-力扣(LeetCode)classSolution{public:stringremoveDuplicates(strings){stack<ch......
  • 代码随想录Day26
    LeetCode513.找树左下角的值      思路:思路1:需要遍历所有路径,找出深度最大的一条路径,并且是左叶子结点的值。思路2:层序遍历最左值。 递归遍历写法:前序......
  • day26 - 基本选择器
    基本选择器标签选择器标签选择器会选择页面上所有这种类型的标签在title下定义<style>标签名称{定义1...定义2...}1<!DOCTYPEhtml>2<htmllang="en">......
  • day26 Vue相关内容及深拷贝和浅拷贝
    Vue相关内容概述:Vue是前端的一个Js库(诞生于2015年,兴起于2016年,尤雨溪写的(目前是阿里巴巴在维护)),vue是MVVM模式的框架.MVVM概述:model数据v......
  • day26 Vue相关内容浅拷贝和深拷贝
    概述:Vue是前端的一个js库(诞生于2015年兴起于2016年尤雨溪(阿里巴巴)),vue是一个MVVM模式的框架。MVVM概述model数据view视图viewmodel视图模型(管理数据驱动视......